gpt4 book ai didi

Java:向不同方向发射弹丸而不影响已发送的弹丸

转载 作者:行者123 更新时间:2023-12-01 22:14:53 25 4
gpt4 key购买 nike

所以基本上,当我改变方向时,我发射的射弹会很好地跟随。问题是之前的所有射弹也会改变方向。

这是我的projectile.java:

package dev.codenmore.tilegame.gfx;

import java.awt.Graphics;

import dev.codenmore.tilegame.Handler;
import dev.codenmore.tilegame.entity.creatures.Player;

public class Projectile {

private double x;
private double y;

public Projectile (double x, double y, Handler handler){
this.x = x;
this.y = y;
}

public void tick(){
if ( Player.getPos() == 3)
x += 10;
if ( Player.getPos() == 2)
x -= 10;
if (Player.getPos() == 1)
y -= 10;
if (Player.getPos() == 0)
y += 10;
}

public void render(Graphics g){
g.drawImage(Assets.arrow, (int) x, (int) y, null);
}

}

这是我的controller.java:

package dev.codenmore.tilegame;

import java.awt.Graphics;
import java.util.LinkedList;

import dev.codenmore.tilegame.gfx.Projectile;

public class Controller {

private static LinkedList<Projectile> b = new LinkedList <Projectile>();

Projectile TempProjectile;

Handler handler;

public Controller(Handler handler){
this.handler = handler;


}

public void tick(){
for(int i = 0; i < b.size(); i++){
TempProjectile = b.get(i);

TempProjectile.tick();

}
}

public void render(Graphics g){
for(int i = 0; i < b.size(); i++){
TempProjectile = b.get(i);

TempProjectile.render(g);

}

}

public static void addProjectile(Projectile block){
b.add(block);
}
public static void removeProjectile(Projectile block){
b.remove(block);
}
}

我的player.java:

package dev.codenmore.tilegame.entity.creatures;

import java.awt.Color;
import java.awt.Graphics;

import dev.codenmore.tilegame.Controller;
import dev.codenmore.tilegame.Game;
import dev.codenmore.tilegame.Handler;
import dev.codenmore.tilegame.gfx.Assets;
import dev.codenmore.tilegame.gfx.Projectile;

public class Player extends Creature {

public static int pos = 0;



public Player(Handler handler, float x, float y) {
super(handler, x, y, Creature.DEFAULT_CREATURE_WIDTH, Creature.DEFAULT_CREATURE_HEIGHT);

bounds.x = 46;
bounds.y = 64;
bounds.width = 32;
bounds.height = 44;

}

@Override
public void tick() {
getInput();
move();
handler.getGameCamera().centerOnEntity(this);
}

private void getInput(){
xMove = 0;
yMove = 0;

if(handler.getKeyManager().up)
yMove = -speed;
if(handler.getKeyManager().down)
yMove = speed;
if(handler.getKeyManager().left)
xMove = -speed;
if(handler.getKeyManager().right)
xMove = speed;
if(handler.getKeyManager().shoot)
Controller.addProjectile(new Projectile((double)(x - handler.getGameCamera().getxOffset()), (double)(y - handler.getGameCamera().getyOffset()), handler));

}

public static int getPos(){
return pos;
}

@Override
public void render(Graphics g) {



if ( pos == 0)
g.drawImage(Assets.player, (int)(x - handler.getGameCamera().getxOffset()), (int)(y - handler.getGameCamera().getyOffset()), width, height, null);
if (pos == 1)
g.drawImage(Assets.playerUp, (int)(x - handler.getGameCamera().getxOffset()), (int)(y - handler.getGameCamera().getyOffset()), width, height, null);
if (pos == 2)
g.drawImage(Assets.playerLeft, (int)(x - handler.getGameCamera().getxOffset()), (int)(y - handler.getGameCamera().getyOffset()), width, height, null);
if (pos == 3)
g.drawImage(Assets.playerRight, (int)(x - handler.getGameCamera().getxOffset()), (int)(y - handler.getGameCamera().getyOffset()), width, height, null);
if(handler.getKeyManager().up){
g.drawImage(Assets.playerUp, (int)(x - handler.getGameCamera().getxOffset()), (int)(y - handler.getGameCamera().getyOffset()), width, height, null);
pos = 1;
}else if(handler.getKeyManager().left){
g.drawImage(Assets.playerLeft, (int)(x - handler.getGameCamera().getxOffset()), (int)(y - handler.getGameCamera().getyOffset()), width, height, null);
pos = 2;
}else if(handler.getKeyManager().right){
g.drawImage(Assets.playerRight, (int)(x - handler.getGameCamera().getxOffset()), (int)(y - handler.getGameCamera().getyOffset()), width, height, null);
pos = 3;
}else if(handler.getKeyManager().down){
g.drawImage(Assets.player, (int)(x - handler.getGameCamera().getxOffset()), (int)(y - handler.getGameCamera().getyOffset()), width, height, null);
pos = 0;
}

}

}

我对编程还很陌生,所以对这些错误感到抱歉。发生的情况如下:http://gyazo.com/118b525d22e42a92fece77f70201cdad

最佳答案

问题所在:

public void tick(){
if ( Player.getPos() == 3)
x += 10;
if ( Player.getPos() == 2)
x -= 10;
if (Player.getPos() == 1)
y -= 10;
if (Player.getPos() == 0)
y += 10;
}

在每个刻度中,都会询问玩家的方向,该方向可以更改,因此射弹也会改变。为了避免这种情况,请在开始时保存每个射弹的位置,如下所示:

private int pos;
public Projectile (double x, double y, Handler handler){
this.x = x;
this.y = y;
this.pos = Player.getPos();
}

然后勾选方法:

public void tick(){
if ( pos == 3)
x += 10;
if ( pos == 2)
x -= 10;
if ( pos == 1)
y -= 10;
if ( pos == 0)
y += 10;
}

切换会更好:

public void tick(){
switch(pos){
case 3: x+=10; break;
case 2: x-=10; break;
case 1: y-=10; break;
case 0: y+=10; break;
}
}

关于Java:向不同方向发射弹丸而不影响已发送的弹丸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31280722/

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