0

我正在用 Java 制作一个非常简单的节奏游戏,我希望玩家用“Beat”来计时按钮按下,“Beat”沿着屏幕向静止的玩家移动。

对象是使用处理程序类实例化的,因此对象没有我可以调用方法的名称,这对玩家来说并不是问题,因为我只打算有一个玩家,但我需要比较几个节拍的位置在屏幕上向下移动到玩家以奖励积分,但我不确定如何为创建的节拍分配名称或直接为它们调用方法的任何其他方式。

handler.addObject(new Beat(1000,300,ID.Beat));
handler.addObject(new Player(100,300,ID.Player));

处理程序类:

import java.awt.*;
import java.util.LinkedList;

//Handler class is responsible for updating and rendering all game objects
public class Handler {

    LinkedList<GameObject> object = new LinkedList<GameObject>();

    public void tick(){
        //loops through every object
        for(int i = 0; i < object.size(); i++){
            // sets temp object to linked list function which gets the ID of the current object
            GameObject tempObject = object.get(i);

            tempObject.tick();
        }
    }

    public void render(Graphics g){
        //renders every object
        for(int i = 0; i < object.size(); i++){
            GameObject tempObject = object.get(i);

            //renders the temp object
            tempObject.render(g);
        }
    }

    public void addObject(GameObject object){
        //linked list built in method to add an object
        this.object.add(object);
    }

    public void removeObject(GameObject object){
        //linked list built in method
        this.object.remove(object);
    }
}

所指的游戏对象类只是一个具有几个位置变量、速度等的类,另一个刻度和渲染方法,除了它只是 getter 和 setter。

4

1 回答 1

0

您需要预先定义对象

Beat b = new Beat(...);
b.foobar()
handler.addObject(b);

处理程序类为每个对象创建一个链表,然后有几个添加新对象的方法

或者迭代它们并检查它们的类型

for (int i = 0; i < object.size(); i++){
  GameObject tempObject = object.get(i);

  if (tempObject instanceof Beat) {
    Beat b = (Beat) tempObject;
    b.foobar();
  }
}

或者在添加它们时执行相同的操作。甚至可能将某些类型拆分为单独的列表。

public void addObject(Gameobject go) {
  if (go instanceof Beat) {
    Beat b = (Beat) go;
    b.foobar();
  }
  // add to list 
}

或者你可以使用方法重载

public void addObject(Beat b) {

}

public void addObject(Player p) {

}
于 2021-11-12T16:25:51.453 回答