我正在制作一个 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();
}
}
我的对象有位置、速度和加速度矢量。
是否有一种普遍接受的方式来进行脚本运动?