-1

我正在制作一个 openGL 自上而下的太空射击游戏来学习如何创建游戏。我有很多基础知识(游戏循环、逻辑隔离等)。

我遇到的一个问题是如何创建更复杂的对象运动。我目前有一些敌人在屏幕上以正弦波移动。我想让他们执行更复杂的动作,例如向下移动屏幕,停止,然后重新开始,也许在这个过程中做一些循环。

我已经将我的移动逻辑分解成它自己的 EnemyMovement 接口,我可以将它附加到任何类型的敌人身上。这是我的正弦波运动课程:

package com.zombor.shooter.movement;

import com.zombor.game.framework.math.Vector2;

public class Sine implements EnemyMovement
{
  private int direction;
  private float totalTime = 0;
  private float deltaTime;

  private int originalX;
  private int originalY;

  private float yVelocity = -4f;
  private float xVelocity = 0;

  public Sine(int x, int y)
  {
    direction = Math.random() > 0.5 ? 1 : -1;
    originalX = x;
    originalY = y;
  }

  public void setDeltaTime(float deltaTime)
  {
    this.deltaTime = deltaTime;
    totalTime+=deltaTime;
  }

  private float xVal()
  {
    return originalX + (float) Math.sin(Math.PI+totalTime)*2*direction;
  }

  public void setPosition(Vector2 position)
  {
    position.add(xVelocity * deltaTime, yVelocity * deltaTime);
    position.x = xVal();
  }
}

我的对象有位置、速度和加速度矢量。

是否有一种普遍接受的方式来进行脚本运动?

4

2 回答 2

0

我正在寻找贝塞尔曲线。

于 2012-08-07T00:36:58.117 回答
0

对于脚本运动,仅使用速度和位置而不使用加速度可能会更容易。另外,你用的是游戏引擎吗?我会推荐像AndEngine这样的东西,而不是重新发明轮子。

于 2012-08-04T17:58:25.817 回答