gpt4 book ai didi

java - 相对于船舶位置的射弹集 Java

转载 作者:行者123 更新时间:2023-11-30 04:32:57 24 4
gpt4 key购买 nike

我正在用 Java 制作一个自上而下的射击游戏克隆。大约一个小时后,我能够弄清楚如何定位飞船的射弹,它是相对于飞船 Sprite 方向的激光。问题是,如果我移动船只,当我移动船只时,射弹会相对于船只方向移动。正如您所看到的,这是一个问题,因为无论发射时飞船位于何处,激光都应该独立移动。

这是提出我的问题的代码:

private Image ship;
private int ship_dx = 500;
private int ship_dy = 400;
private int ship_velocity = 5;
private boolean isLaser = false;
private static final int laser_DyOffSetOfBall = 48;
private static final int laser_DxOffSetOfBall = 23;
private Image laser;
private int laser_dx = ship_dx+laser_DxOffSetOfBall;
private int laser_dy = ship_dy-laser_DyOffSetOfBall;
private int laser_velocity= 10;

public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(ship, ship_dx, ship_dy, this);
if(isLaser){

laser_dy -= laser_velocity;
laser_dx = ship_dx+laser_DxOffSetOfBall;
g.drawImage(laser,laser_dx,laser_dy,this);
if(laser_dy < 50)
{
isLaser = false;
laser_dy = ship_dy-laser_DyOffSetOfBall;
}
}
Toolkit.getDefaultToolkit().sync();
}

这是游戏!:

IMG

最佳答案

您只需在第一次绘制(paint)时设置激光的 x 位置,否则每次重新绘制(paint)时,激光都会相对于船舶水平移动。为此,您可以添加另一个 boolean 值 isFirst(用于激光的第一次绘制),当 isLaser 第一次变为 true 时设置为 true,并且仅当 isFirst 为 true 时才设置 x 位置。

boolean isFirst = true;

public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(ship, ship_dx, ship_dy, this);
if(isLaser){
laser_dy -= laser_velocity;
if(isFirst){

laser_dx = ship_dx+laser_DxOffSetOfBall;
isFirst = false;

}
g.drawImage(laser,laser_dx,laser_dy,this);
if(laser_dy < 50)
{
isLaser = false;
laser_dy = ship_dy-laser_DyOffSetOfBall;
}
} else {
isFirst = true;
}
Toolkit.getDefaultToolkit().sync();
}

关于java - 相对于船舶位置的射弹集 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com