J'ai littéralement cherché une demi-heure pour cette question et je n'ai pas trouvé ce que je cherchais. C'est mon premier programme lwjgl. La plupart des choses ici sont temporaires, je suis juste en train de m'habituer à LWGJL pour que je puisse finalement en faire un jeu. Je suis juste en train de faire fonctionner certaines fonctions de base.Déplacement d'une entité à un angle?
Donc, fondamentalement, je veux que mon entité se déplace dans le sens de son angle.
Ceci est mon code de mouvement:
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());
}
Ceci est mon principal code de mise à jour:
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);
}
Et mon code rotate juste pour les bonnes mesures:
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);
}
}
S'il vous plaît demander si tu veux voir autre chose.
Merci!
C'est déprécié OpenGL, évitez-le. – elect
C'est un peu vague; quelle partie est dépréciée? –
https://www.opengl.org/wiki/Legacy_OpenGL – elect