gpt4 book ai didi

java - 光滑2d |渲染和更新的最佳方式

转载 作者:行者123 更新时间:2023-11-30 04:25:26 25 4
gpt4 key购买 nike

问题:

您认为渲染和更新实体的最佳方式是什么?
目前我正在使用世界一流的技术来做到这一点。

链接:

The game (finished)

代码(来自 World.java):

List<Entity> entities = new ArrayList<Entity>();

public void render(GameContainer gc, Graphics g, Camera camera) {
// Draw background
background.draw(0 - camera.getX(), 0 - camera.getY(), 2100, 2100);

// Loop through all entities and render
for (int i = 0; i < entities.size(); i++) {
Entity entity = entities.get(i);

// A very long if... render only if visible
if (entity.getX() < player.getX() + ((gc.getWidth() / 2) + entity.getWidth() + 50) &&
entity.getX() > player.getX() - ((gc.getWidth() / 2) + entity.getWidth() + 50) &&
entity.getY() < player.getY() + ((gc.getHeight() / 2) + entity.getHeight() + 50) &&
entity.getY() > player.getY() - ((gc.getHeight() / 2) + entity.getHeight() + 50)) {
entity.render(gc, g);
}
}
}


public void update(GameContainer gc, int delta) {
// Loop through entities and update all time
for (int i = 0; i < entities.size(); i++) {
Entity entity = entities.get(i);
entity.update(gc, delta);
}
}

最佳答案

List<Entity> entities = new ArrayList<Entity>();

public void render(GameContainer gc, Graphics g, Camera camera) {
background.draw(0 - camera.getX(), 0 - camera.getY(), 2100, 2100);
for( Entity entity : entities ) {
if( entity.isVisible( player, gc )) {
entity.render( gc, g );
}
}
}

public void update(GameContainer gc, int delta) {
for( Entity entity : entities ) {
entity.update( gc, delta );
}
}

Entity.update() 不应修改列表,就地使用:

private final List< Entity > toBeRemoved = new LinkedList<>();

public void update(GameContainer gc, int delta) {
toBeRemoved.clear();
for( Entity entity : entities ) {
if( entity.update( gc, delta )) {
toBeRemoved.add( entity );
}
}
entities.removeAll( toBeRemoved );
}

Entity.update() 当实体需要删除时返回 true。

关于java - 光滑2d |渲染和更新的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15993012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com