【问题标题】:Math in Java problem with GTGEGTGE 中的 Java 数学问题
【发布时间】: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


    【解决方案1】:

    可能是他移动得太远了,所以他从来没有完全处于“停止”位置。如果他在每个时间步移动 10 个单位,您可以假设他在 10 次尝试中只会在任何给定时间步结束时处于停止位置。

    我会计算你点击时必须走的距离。然后,您可以将自被告知移动以来发生的时间步数乘以每个刻度移动的距离。当这个乘法大于你的原点和目的地之间的毕达哥拉斯距离时,你可以将你的移动设置为 0,将你的位置设置为目的地。 (显然,在渲染之前执行此操作)

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      相关资源
      最近更新 更多