java - 在java游戏中为多个实体设置方向的问题
问题描述
我不想给我所有的 gost 实体一个随机的方向,但我不知道如何
我已经设法将我的所有实体方向设置为在 X 或 Y 步骤中移动,但这是一个静态运动,是否有随机移动它们?也许通过使用某种计时器?
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);
}
我不希望我的实体有一个随机方向而不是一个静态。
解决方案
所以你有几个问题。第一个是您将单个“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);
}
}
推荐阅读
- ios - (自动化:Appium\Java)(Xamarin Forms\iOS 13)在应用程序内下载后,元素在树中不可见
- google-apps-script - 你如何从谷歌脚本设置图表聚合设置
- angular - 页面加载时的角度 p-inputswitch
- java - 使用 Java 将文件推送到现有的 GitLab 存储库?
- sql - T-SQL 嵌套游标 - 所有可能的排列匹配
- react-native - 不能通过使用 axios 将 get 与 body 参数一起使用
- mysql - Google Cloud SQL 跟踪长查询
- nginx - 进行 API 调用时请求随机挂起
- powerbi - Powerbi:仅显示表中 > 0 的值
- android - Android webviews 和 loadData()