【发布时间】:2011-04-06 23:03:02
【问题描述】:
我有一个 GTGE 游戏,但我遇到了一些数学问题。我不明白为什么它没有按照我想要的方式移动。当您单击某个地方时,精灵会移动到那里。当您右键单击时,它会计算角度并移动到那里,但它不会停止。我捕获鼠标的位置,每次更新屏幕时,我都会检查精灵是否已到达该位置,但当它到达时它不会停止。这是我的代码:
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import com.golden.gamedev.Game;
import com.golden.gamedev.GameLoader;
import com.golden.gamedev.object.Background;
import com.golden.gamedev.object.Sprite;
import com.golden.gamedev.object.background.ImageBackground;
public class SpriteTest extends Game {
//Default Background
Background background;
//Toolkit!
Toolkit toolkit = Toolkit.getDefaultToolkit();
//Main Sprite
Sprite pacman;
Dimension stop;
@Override
public void initResources() {
//Load the background
background = new ImageBackground(getImage("nature-wallpapers.jpg"));
//Load the Sprite
pacman = new Sprite(getImage("pacman.png"));
pacman.setActive(false);
pacman.setBackground(background);
playMusic("intro.mid");
showCursor();
}
@Override
public void render(Graphics2D g) {
//Render background
background.render(g);
//Render sprites
pacman.render(g);
}
@Override
public void update(long elapsedTime) {
//Update the background
background.update(elapsedTime);
//Update sprites
if(click()) {
pacman.setActive(true);
pacman.setLocation(getMouseX(), getMouseY());
}
if(rightClick()) {
int spriteLocX = (int) pacman.getX();
int spriteLocY = (int) pacman.getY();
int mouseX = getMouseX();
int mouseY = getMouseY();
pacman.setMovement(1, -(Math.toDegrees(Math.atan2(mouseY - spriteLocY, mouseX - spriteLocX ))));
stop = new Dimension(mouseX, mouseY);
}
if(stop != null) {
if(pacman.getX() == stop.getWidth()) {
if(pacman.getY() == stop.getHeight()){
pacman.setMovement(0, 0);
}
}
}
pacman.update(elapsedTime);
}
public static void main(String[] args) {
GameLoader game = new GameLoader();
game.setup(new SpriteTest(), new Dimension(800,600), true);
game.start();
}
}
【问题讨论】:
标签: java math trigonometry game-engine