わかりましたので、クラスとオンラインの両方のチュートリアルに従って、Javaを数週間試しています。正方形が画面の下部に向かって落ちるシンプルなゲームを作成しました。プレーヤーは小さなボールを操作し、x 軸上のみを移動してそれらを避けようとします。
私が抱えている問題は、正方形の落下が速すぎることです。現在、次のように設定しています。
ix = 0;
iy = 1;
次に、私の move() メソッドには、次のものがあります。
hitbox.x += ix;
hitbox.y += iy;
この例では、ix と iy は両方とも整数です。
私の最初の仮定は、int を float に変更してから、次を使用することでした。
ix= 0;
iy = 0.5;
その後:
hitbox.x += ix;
hitbox.y += 0.5f;
しかし、これはトラック内のオブジェクトをフリーズさせるだけです。これは、コードが整数として扱われるためだと思います。したがって、getX() および getY() メソッドを変更すれば、何らかの方法でそれらを操作して 10 進数を使用できるのではないかと考えました。しかし、どうすればよいかよくわかりません。この問題に対するヘルプ/ヒント/解決策は大歓迎です。
ここにいくつかの敬虔なコードがあります。これ以上必要な場合はお知らせください。
敵マネージャー:
public class EnemyManager {
private int amount;
private List<Enemy> enemies = new ArrayList<Enemy>();
private GameInJavaOne instance;
public EnemyManager(GameInJavaOne instance, int a){
this.amount = a;
this.instance = instance;
spawn();
}
private void spawn(){
Random random = new Random();
int ss = enemies.size();
// If the current amount of enemies is less than the desired amount, we spawn more enemies.
if(ss < amount){
for(int i = 0; i < amount - ss; i++){
enemies.add(new Enemy(instance, random.nextInt(778), random.nextInt(100)+1));
}
// If its greater than the desired number of enemies, remove them.
}else if (ss > 20){
for(int i = 0; i < ss - amount; i++){
enemies.remove(i);
}
}
}
public void draw(Graphics g){
update();
for(Enemy e : enemies) e.draw(g);
}
private void update() {
boolean re = false;
for(int i = 0; i < enemies.size(); i ++){
if(enemies.get(i).isDead()){
enemies.remove(i);
re = true;
}
}
if(re) spawn();
}
public boolean isColliding(Rectangle hitbox){
boolean c =false;
for(int i = 0; i < enemies.size(); i ++){
if(hitbox.intersects(enemies.get(i).getHitbox())) c = true;
}
return c;
}
}
実在物:
public abstract class Entity {
protected int x, y, w, h;
protected boolean removed = false;
public Entity(int x, int y){
this.x = x;
this.y = y;
}
public void Draw(Graphics g){
}
public int getX() { return x; }
public int getY() { return y; }
public int getH() { return h; }
public int getW() { return w; }
}
そして敵のクラス:
public class Enemy extends Entity{
private Rectangle hitbox;
private int ix, iy;
private boolean dead = false;
private GameInJavaOne instance;
public Enemy(GameInJavaOne instance, int x, int y){
super(x, y);
this.instance = instance;
hitbox = new Rectangle(x, y, 32, 32);
ix = 0;
iy = 1;
}
private void move(){
if(instance.getStage().isCollided(hitbox)){
iy =0;
dead = true;
}
hitbox.x += ix;
hitbox.y += iy;
}
public boolean isDead() {return dead;}
public Rectangle getHitbox() {return hitbox; }
public void draw(Graphics g){
move();
g.setColor(Color.MAGENTA);
g.fillRect(hitbox.x, hitbox.y, hitbox.height, hitbox.width);
}
}