我为我正在研究的游戏引擎编写了一个事件系统,它将事件添加到地图中的图块中,当玩家与其交叉时,它会执行某些操作。无论那是什么东西。在此测试用例中,它会加载新映射。
问题在于,开始游戏时的帧速率大约为30,直到我通过走过它开始事件,这会启动事件并使fps达到大约60.
编辑:似乎这个问题只在我添加事件后弹出。但是,我添加了另一个类似的变形事件,看看fps是否下降得更多,它没有。在我完成第一个事件后,fps恢复正常,我仍然使用第二个事件。这是事件类:
public class Event {
//Warping variables
private int newX, newY;
private Map _map, _mapOverlay;
private String eventType;
private String _name;
public Event(String name, String type) {
_name = name;
eventType = type;
}
public void setWarp(Map map, Map overlay, int x, int y) {
_map = map;
_mapOverlay = overlay;
newX = x;
newY = y;
}
public Map getMap() { return _map; }
public Map getOverlay() { return _mapOverlay; }
public int getNewX() { return newX; }
public int getNewY() { return newY; }
public String getEventType() { return eventType; }
public String getname() { return _name; }
}
这是与warp事件发生冲突时调用的算法:
if(spr.spriteType() == "player" && tile.hasEvent()) {
if(tile.event().getEventType() == "warp") {
tiles().clear();
currentMap = tile.event().getMap();
currentOverlay = tile.event().getOverlay();
for(int i = 0; i < currentMap.getWidth() * currentMap.getHeight(); i++){
tiles().add(currentMap.accessTile(i));
tiles().add(currentOverlay.accessTile(i));
}
playerX = tile.event().getNewX();
playerY = tile.event().getNewY();
tile.endEvent();
}
}
这是tile类内部的部分,其中包含与添加事件有关的方法。
public void addEvent(Event event) {
this.event = event;
hasEvent = true;
}
public Event event() { return event; }
public boolean hasEvent() { return hasEvent; }
public void endEvent() {
event = null;
hasEvent = false;
}
最后,以下是用于将事件添加到地图中现有图块的三行:
warp1 = new Event("testWarp", "warp");
warp1.setWarp(city, cityOverlay, -200, 0);
city.accessTile(204).addEvent(warp1);