正在开发 Java 2D 游戏。
Sprite 应该在特定的角度移动,通过按左右键设置,然后按向上箭头键。
它没有按照我希望它移动的角度移动。它移动的角度似乎相差 90 度。怎么了?
Thing
类的相关方法
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.ImageIcon;
public class Thing {
Image image;
int width,height;
double x,y,dx,dy,angle;
public Thing(){
image = new ImageIcon(this.getClass().getResource("image.png")).getImage();
width = image.getWidth(null);
height = image.getHeight(null);
dx = 0;
dy = 0;
angle=90;
x = 250;
y = 250;
}
public void move(){
x += dx;
y += dy;
}
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
if(key==KeyEvent.VK_LEFT)angle-=5;
if(key==KeyEvent.VK_RIGHT)angle+=5;
if(key==KeyEvent.VK_UP){
dy = 5 * Math.sin(angle);
dx = 5 * Math.sin(90-angle);
}
}
public void keyReleased(KeyEvent e){
int key = e.getKeyCode();
if(key==KeyEvent.VK_UP){
setDY(0);
setDX(0);
}
}
}
Board类相关方法:
package learningMovement;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
public class Board extends JPanel implements ActionListener, KeyListener {
Thing t;
Timer timer;
public Board(){
timer = new Timer(10,this);
t = new Thing();
setFocusable(true);
timer.start();
addKeyListener(this);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.rotate(Math.toRadians(t.getAngle()),t.getX()+(t.getWidth()/2),t.getY()+(t.getHeight()/2));
g2d.drawImage(t.getImage(),(int)t.getX(),(int)t.getY(),this);
}
public void actionPerformed(ActionEvent e){
t.move();
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key==KeyEvent.VK_LEFT)t.keyPressed(e);
if(key==KeyEvent.VK_RIGHT)t.keyPressed(e);
if(key==KeyEvent.VK_UP)t.keyPressed(e);
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if(key==KeyEvent.VK_LEFT)t.keyReleased(e);
if(key==KeyEvent.VK_RIGHT)t.keyReleased(e);
if(key==KeyEvent.VK_UP)t.keyReleased(e);
}
public void keyTyped(KeyEvent arg0) {}
}
最佳答案
为什么会这样:
dy = 5 * Math.sin(angle);
dx = 5 * Math.sin(90-angle);
什么时候应该是:
dy = 5 * Math.sin(angle);
dx = 5 * Math.cos(angle);
也像 HAL9000 所说不要忘记转换为弧度。
关于java - 在 Java 2D 游戏中, Sprite 没有朝正确的方向移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20867772/