我正在制作一个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();
}
}
我的物体有位置,速度和加速度矢量。
是否有一种普遍接受的脚本运动方式?
答案 0 :(得分:0)
对于脚本移动,仅使用速度和位置而不加速可能更为有效。另外,你使用的是游戏引擎吗?我建议像AndEngine之类的东西,而不是重新发明轮子。
答案 1 :(得分:0)
bezier曲线正是我正在寻找的。 p>