Je suis récemment passé de Gamemaker: Studio à Java et Slick2D. Je ne suis pas sûr de savoir comment décrire mon problème, mais je ferai de mon mieux. Dans Gamemaker, il y avait une fonction appelée motion_add qui ajouterait du mouvement à un objet avec les paramètres donnés (vitesse et direction). Disons que nous avons un objet descendant à 20 pixels/image. Si vous deviez inverser l'angle de cet objet de 180 degrés (il pointe maintenant vers le haut) et exécuter le code motion_add, il ralentirait jusqu'à 0, puis accélérerait de nouveau. Cela fonctionne très bien pour le mouvement spatial flottant (ce que j'essaie de faire).Java/Slick2D Malédictions du mouvement (Ajouter un mouvement au lieu de le régler?)
Ma question est, comment puis-je recréer ceci? Ceci est mon code actuel mobile:
private void doPlayerMovement(Input input, int delta) {
// Calculate rotation speed
rotateSpeed = rotateSpeedBase - (speed/5);
if (rotateSpeed < 0.1f) { rotateSpeed = 0.1f; }
// Get input
if (input.isKeyDown(Input.KEY_A)) {
// Rotate left
if (input.isKeyDown(Input.KEY_W)) { rotation -= rotateSpeed * delta; }
sprite.rotate(-rotateSpeed * delta);
}
if (input.isKeyDown(Input.KEY_D)) {
// Rotate right
if (input.isKeyDown(Input.KEY_W)) { rotation += rotateSpeed * delta; }
sprite.rotate(rotateSpeed * delta);
}
if (input.isKeyDown(Input.KEY_W)) {
// Accelerate
speed += acceleration * delta;
} if (input.isKeyDown(Input.KEY_S)) {
// Decelerate
speed -= acceleration * delta;
} else {
if (speed > 0) { speed -= friction; }
}
// Clamping
if (speed > maxSpeed) { speed = maxSpeed; } else if (speed < minSpeed) { speed = minSpeed; }
if (rotation > 360 || rotation < -360) { rotation = 0; }
// Make sure rotation catches up with image angle, if necessairy
if (rotation != sprite.getRotation() && input.isKeyDown(Input.KEY_W)) {
rotation = sprite.getRotation();
}
// Update position
position.x += speed * Math.sin(Math.toRadians(rotation)) * delta;
position.y -= speed * Math.cos(Math.toRadians(rotation)) * delta;
Qu'advient: A et D tournent l'image-objet. Si vous appuyez sur W (ce qui accélère l'objet), cela «oriente» l'objet. Si la rotation de l'objet n'est pas la même que la rotation de l'image-objet, la rotation de l'objet sera définie sur la rotation de l'image-objet et , où est mon problème. Cela permettra à l'objet de tirer instantanément dans la nouvelle direction avec sa vitesse ne ralentissant pas. Comment puis-je le ralentir?
Modifier (sorte de) Je suis sûr qu'il doit y avoir un nom pour cela, si vous deviez conduire une voiture à 100 mph, le faire tourner de 180 ° en quelque sorte pendant son déplacement, et appuyez sur la gaz, il va ralentir puis accélérer à nouveau. C'est ce que j'essaie d'accomplir. Merci pour tout conseil.