java游戏中为多个实体设置方向的问题
我不想给我所有的gost实体一个随机的方向,但我不知道怎么做 我已经成功地将所有实体的方向设置为以X或Y步移动,但这是一个静态移动,是否有随机移动它们的方法?也许用某种定时器java游戏中为多个实体设置方向的问题,java,entity,Java,Entity,我不想给我所有的gost实体一个随机的方向,但我不知道怎么做 我已经成功地将所有实体的方向设置为以X或Y步移动,但这是一个静态移动,是否有随机移动它们的方法?也许用某种定时器 private GameScreen gs; private boolean gameRunning = true; private int fps; private Entity player; private ArrayList<Entity> entityLi
private GameScreen gs;
private boolean gameRunning = true;
private int fps;
private Entity player;
private ArrayList<Entity> entityList = new ArrayList<>();
private HashMap<String, Boolean> keyDown = new HashMap<>();
public void loadObjects() {
Image playerImg = new ImageIcon(getClass().getResource("/playerImg.png")).getImage();
Image gostImg = new ImageIcon(getClass().getResource("/gostImg.png")).getImage();
player = new Entity(playerImg, 100, 200, 200);
entityList.add(player);
entityList.add(new Entity(gostImg, 224, 350, 60));
entityList.add(new Entity(gostImg, 460, 250, 60));
entityList.add(new Entity(gostImg, 624, 300, 60));
entityList.add(new Entity(gostImg, 942, 550, 60));
entityList.add(new Entity(gostImg, 520, 560, 60));
}
public void update(long deltaTime) {
checkCollisionandRemove();
if(keyDown.get("right")) {
player.setDirectionX(1);
player.setDirectionY(0);
}
else if(keyDown.get("left")){
player.setDirectionX(-1);
player.setDirectionY(0);
}
if(keyDown.get("up")) {
player.setDirectionY(-1);
player.setDirectionX(0);
}
else if(keyDown.get("down")) {
player.setDirectionY(1);
player.setDirectionX(0);
}
if(player.getX() < 0) {
player.setX(0);
}
if(player.getX() > gs.getWidth() - player.getWidth()) {
player.setX(gs.getWidth() - player.getWidth());
}
if(player.getY() < 0) {
player.setY(0);
}
if(player.getY() > gs.getHeight() - player.getHeight()) {
player.setY(gs.getHeight() - player.getHeight());
}
for(Entity entity : entityList) {
entity.moveX(deltaTime);
entity.moveY(deltaTime);
entity.setDirectionX(1);
if(entity.equals(player)) {
player.setDirectionX(0);
player.setDirectionY(0);
}
if(entity.getX() < 0){
entity.setX(0);
}
if(entity.getX() > gs.getWidth() - entity.getWidth()) {
entity.setX(gs.getWidth() - entity.getWidth());
}
if(entity.getY() < 0) {
entity.setY(0);
}
if(entity.getY() > gs.getHeight() - entity.getHeight()) {
entity.setY(gs.getHeight() - player.getHeight());
}
}
player.moveX(deltaTime);
player.moveY(deltaTime);
}
私人游戏屏;
私有布尔gameRunning=true;
私人int fps;
私人实体参与者;
私有ArrayList entityList=新ArrayList();
private HashMap keyDown=new HashMap();
公共void loadObjects(){
Image playerImg=newimageicon(getClass().getResource(“/playerImg.png”)).getImage();
Image-gostImg=new-ImageIcon(getClass().getResource(“/gostImg.png”)).getImage();
player=新实体(playerImg,100200200);
entityList.add(播放器);
添加(新实体(gostImg,224350,60));
添加(新实体(gostImg,460250,60));
添加(新实体(gostImg,624300,60));
添加(新实体(gostImg,94255060));
添加(新实体(gostImg,520560,60));
}
公共无效更新(长deltaTime){
检查碰撞和移动();
if(keyDown.get(“right”)){
player.setDirectionX(1);
player.setDirectionY(0);
}
else if(keyDown.get(“left”)){
player.setDirectionX(-1);
player.setDirectionY(0);
}
if(keyDown.get(“up”)){
player.setDirectionY(-1);
player.setDirectionX(0);
}
else if(keyDown.get(“down”)){
player.setDirectionY(1);
player.setDirectionX(0);
}
if(player.getX()<0){
player.setX(0);
}
if(player.getX()>gs.getWidth()-player.getWidth()){
setX(gs.getWidth()-player.getWidth());
}
if(player.getY()<0){
player.setY(0);
}
if(player.getY()>gs.getHeight()-player.getHeight()){
player.setY(gs.getHeight()-player.getHeight());
}
for(实体:entityList){
实体.moveX(deltaTime);
实体移动(deltaTime);
实体.setDirectionX(1);
如果(实体相等(玩家)){
player.setDirectionX(0);
player.setDirectionY(0);
}
if(entity.getX()<0){
实体.setX(0);
}
if(entity.getX()>gs.getWidth()-entity.getWidth()){
setX(gs.getWidth()-entity.getWidth());
}
if(entity.getY()<0){
实体setY(0);
}
if(entity.getY()>gs.getHeight()-entity.getHeight()){
setY(gs.getHeight()-player.getHeight());
}
}
player.moveX(deltaTime);
player.moveY(deltaTime);
}
我不希望我的实体有一个随机方向而不是一个静态方向。所以你有一些问题。首先,您有一个定义为全局变量的“gost”对象。然后多次设置它的值并将其添加到ArrayList中。我的假设是,您的列表中只有一个gost 这是您的代码,稍作修改。我没有做任何测试,但是试一下
private GameScreen gs;
private boolean gameRunning = true;
private int fps;
private Entity player;
//private Entity gost; Removed because I don't think you need this.
private ArrayList<Entity> entityList = new ArrayList<>();
private HashMap<String, Boolean> keyDown = new HashMap<>();
public void loadObjects() {
Image playerImg = new ImageIcon(getClass().getResource("/playerImg.png")).getImage();
Image gostImg = new ImageIcon(getClass().getResource("/gostImg.png")).getImage();
player = new Entity(playerImg, 100, 200, 200);
//entityList.add(player); I don't think you need this either, unless you check all of your entities in your checkCollisionandRemove() method
//Create your "Gost" entities this way.
entityList.add(new Entity(gostImg, 224, 350, 10));
entityList.add(new Entity(gostImg, 460, 20, 10));
entityList.add(new Entity(gostImg, 624, 300, 10));
entityList.add(new Entity(gostImg, 942, 550, 20));
entityList.add(new Entity(gostImg, 520, 760, 30));
}
public void update(long deltaTime) {
checkCollisionandRemove();
if(keyDown.get("right")) {
player.setDirectionX(1);
player.setDirectionY(0);
}
else if(keyDown.get("left")){
player.setDirectionX(-1);
player.setDirectionY(0);
}
if(keyDown.get("up")) {
player.setDirectionY(-1);
player.setDirectionX(0);
}
else if(keyDown.get("down")) {
player.setDirectionY(1);
player.setDirectionX(0);
}
if(player.getX() < 0) {
player.setX(0);
}
if(player.getX() > gs.getWidth() - player.getWidth()) {
player.setX(gs.getWidth() - player.getWidth());
}
if(player.getY() < 0) {
player.setY(0);
}
if(player.getY() > gs.getHeight() - player.getHeight()) {
player.setY(gs.getHeight() - player.getHeight());
}
player.moveX(deltaTime);
player.moveY(deltaTime);
//Move each gost this way.
for(Entity entity : entityList) {
/*
If you need to include your player object into the entity list you will need a way to tell whether entity is a gost or player.
Something like: if(entity.getType().equalsIgnoreCase("gost")) then move
*/
entity.moveX(deltaTime);
entity.moveY(deltaTime);
}
}
私人游戏屏;
私有布尔gameRunning=true;
私人int fps;
私人实体参与者;
//私营实体gost;删除,因为我认为你不需要这个。
私有ArrayList entityList=新ArrayList();
private HashMap keyDown=new HashMap();
公共void loadObjects(){
Image playerImg=newimageicon(getClass().getResource(“/playerImg.png”)).getImage();
Image-gostImg=new-ImageIcon(getClass().getResource(“/gostImg.png”)).getImage();
player=新实体(playerImg,100200200);
//add(player);我认为您也不需要它,除非您在checkCollisionandRemove()方法中检查所有实体
//以这种方式创建“Gost”实体。
添加(新实体(gostImg,224350,10));
添加(新实体(gostImg,460,20,10));
添加(新实体(gostImg,624300,10));
添加(新实体(gostImg,94255020));
添加(新实体(gostImg,520760,30));
}
公共无效更新(长deltaTime){
检查碰撞和移动();
if(keyDown.get(“right”)){
player.setDirectionX(1);
player.setDirectionY(0);
}
else if(keyDown.get(“left”)){
player.setDirectionX(-1);
player.setDirectionY(0);
}
if(keyDown.get(“up”)){
player.setDirectionY(-1);
player.setDirectionX(0);
}
else if(keyDown.get(“down”)){
player.setDirectionY(1);
player.setDirectionX(0);
}
if(player.getX()<0){
player.setX(0);
}
if(player.getX()>gs.getWidth()-player.getWidth()){
setX(gs.getWidth()-player.getWidth());
}
if(player.getY()<0){
player.setY(0);
}
if(player.getY()>gs.getHeight()-player.getHeight()){
player.setY(gs.getHeight()-player.getHeight());
}
player.moveX(deltaTime);
player.moveY(deltaTime);
//这样移动每个gost。
对于(实体:entityList){
/*
如果需要将玩家对象包括在实体列表中,则需要一种方法来判断实体是gost还是玩家。
类似于:if(entity.getType().equalsIgnoreCase(“gost”))然后移动
*/
实体.moveX(deltaTime);
实体移动(deltaTime);
}
}
这里有很多问题。您正在将“gost”添加到列表中,但仅移动最后一个“gost”。您需要循环浏览实体列表。你在哪里设定方向?正如@SteveSmith所说,这个计划缺少一些部分。现在没有迭代循环