精灵没有正确移动Java

时间:2016-03-02 00:35:45

标签: java image rendering

我正在尝试使用java制作太空射击游戏,但它无法正常工作。我目前正致力于产生敌人。为了保持所有敌人的位置,我使用了一个名为ArrayList的{​​{1}}。 allEnemies填充了ArrayList个对象。我在游戏循环中调用Point来更新游戏。

最初,我让敌人的y位置增加1,但这太快了,所以我把它改为0.2以试图减速。一旦我做到0.2,精灵在顶部产生但没有向下移动。我适用于任何高于1的值,包括小数,但不是下面的任何值。这是我的代码:

Enemy.java

updateEnemies()

Game.java

package main;

import java.awt.Point;
import java.util.ArrayList;

public class Enemy {

    static ArrayList<Point> allEnemies = new ArrayList<Point>();

    public static ArrayList<Point> createEnemies(int round) {
        for (int i = 0; i < round; i++) {
            Point newEnemyLocation = new Point((int) (Math.random()*Game.WIDTH - 64), 0);
            allEnemies.add(newEnemyLocation);
        }
        return allEnemies; 
    }

    public static ArrayList<Point> updateEnemies() {
        if (allEnemies.size() != 0) {
            for (int i = 0; i < allEnemies.size(); i++) {
                Point enemyLocation = allEnemies.get(i);
                if (enemyLocation.y <= Game.HEIGHT) {
                    allEnemies.get(i).y += 0.2;
                } else {
                    allEnemies.remove(i);
                }   
            }
        }
        return allEnemies;
    }

}

1 个答案:

答案 0 :(得分:2)

你好,因为点类包含2个整数x和y,你试图将0.2添加到一个只能存储没有小数的值的整数,所以你有2个选项1是将点更改为Point2D(保持双精度数)并且double可以保存带小数的数字)或者你可以用ax和y float / double创建一个敌人类,但在这种情况下我会选择1,因为这是一个小游戏,祝你好运!

编辑: 我错了关于point2d,只是看到它是一个抽象类,所以这样做

公共阶级敌人{

public double x,y;

公敌(双x,双y){

      this.x = x;
      this.y = y;

}

}

并将其用作你的arraylist中的对象