我的第一个项目是用Java制作游戏Pong.因为我需要计算我的x位置和y位置的delta ,我认为最好的方法是使用双变量(对不起,如果我错了).但是你不能使用double来填充lib中的形状java.awt.*.
在这里我计算球击球后的角度
int c = (int) Math.atan2(ball.getPosY(), ball.getPosX());
int delta_x = (int) (1 * Math.cos(c));
int delta_y = (int) (1 * Math.sin(c));
this.dx += delta_x;
this.dy += delta_y;
Run Code Online (Sandbox Code Playgroud)
与dx和dy我改变的位置x和y乓球.我在这里画我的乒乓球.
g.setColor(Color.WHITE);
g.fillOval(this.posX, this.posY, 25, 25);
Run Code Online (Sandbox Code Playgroud)
如果我想要dx并且dy更准确,我必须改变类型delta_y和delta_x加倍.但fillOval()不适用于双变量.所以我必须改为使用我的图形geom.Point2D.Double吗?
目前我正在用Java编写一个关卡编辑器.级别在JPanel中.在这个JPanel里面我把游戏元素(英雄,敌人,树,墙......)用于我使用class.GameElement的每个元素.
public class GameElement extends JPanel
{
protected int posX, posY;
private Color color;
public GameElement(int x, int y, Color color)
{
this.posX = x;
this.posY = y;
this.color = color;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(color);
g.fillRect(0, 0, 50, 50);
}
}
Run Code Online (Sandbox Code Playgroud)
GameElement类也是一个JPanel.我希望使用KeyListener可以移动游戏元素英雄.
import java.awt.Color;
import java.awt.event.*;
public class Hero extends Entity implements KeyListener
{
public Hero(int x, int y, Color color)
{
super(x, y, color);
this.setFocusable(true);
this.addKeyListener(this);
}
public void keyPressed(KeyEvent k)
{
if(k.getKeyCode() == KeyEvent.VK_UP) …Run Code Online (Sandbox Code Playgroud)