Я буквально искал полчаса за этот вопрос, и я не нашел то, что искал. Это моя первая программа lwjgl. Большая часть материала здесь временно, я просто привык к LWGJL, поэтому могу в конечном итоге превратить это в игру. Я просто запускаю некоторые базовые функции.Перемещение объекта под углом?
Так что, в основном, я хочу, чтобы моя сущность двигалась в направлении ее угла.
Это мой код движения:
public static void moveAtAngle(Entity entity) {
float x = entity.getX();
float y = entity.getY();
float xv = entity.getXV();
float yv = entity.getYV();
float angle = entity.getAngle();
x += xv * Math.cos(Math.toRadians(angle - 90));
y += yv * Math.cos(Math.toRadians(angle - 90));
entity.setXAndY(x, y);
}
public static void move(Entity entity, float vel, float anglevel) {
entity.setXV(entity.getXV() * vel);
entity.setX(entity.getX() + entity.getXV());
entity.setYV(entity.getYV() * vel);
entity.setY(entity.getY() + entity.getYV());
entity.setAV(entity.getAV() * anglevel);
entity.setAngle(entity.getAngle() + entity.getAV());
}
Это мой основной код обновления:
public static void update() {
Graphics.move(Entity.sprite, 0.95F, 0.99F);
Graphics.moveAtAngle(Entity.sprite);
if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
Entity.sprite.setAV(Entity.sprite.getAV() + 0.1F);
}
if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
Entity.sprite.setAV(Entity.sprite.getAV() - 0.1F);
}
if (Keyboard.isKeyDown(Keyboard.KEY_UP)) {
Entity.sprite.setYV(Entity.sprite.getYV() - 1);
}
if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
Entity.sprite.setYV(Entity.sprite.getYV() + 1);
}
}
public static void updateGraphics() {
glMatrixMode(GL_PROJECTION);
glOrtho(0, SLDisplay.getWidth(), SLDisplay.getHeight(), 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
while (!Display.isCloseRequested()) {
update();
glPushMatrix();
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
Graphics.rotate(Entity.sprite);
Graphics.drawTriangle(Entity.sprite.getX(), Entity.sprite.getY(), 150F, (byte) 150, (byte) 200, (byte) 255, (byte) 0);
glPopMatrix();
Display.update();
Display.sync(60);
}
destroy(false);
}
И мой поворот код только для хороших мер:
public static void rotate(Entity entity) {
glTranslatef(entity.getX(), entity.getY(), 0);
glRotatef(-entity.getAngle(), 0, 0, 1);
glTranslatef(-entity.getX(), -entity.getY(), 0);
if (entity.getAngle() <= 0){
entity.setAngle(entity.getAngle() + 360);
} else if (entity.getAngle() >= 360) {
entity.setAngle(entity.getAngle() - 360);
}
}
Пожалуйста, спросите, если вы хотите увидеть что-нибудь еще.
Спасибо!
Это устаревшее OpenGL, избегайте его. – elect
Это немного расплывчато; какая часть его устарела? –
https://www.opengl.org/wiki/Legacy_OpenGL – elect