0
내 질문 :
왜 게임에 엔티티를 추가하면 (entityManager.addEntity(new Tree(handler, 19 * 64, 7 * 64));
) 한 번에 2 개의 엔티티가 추가됩니까?
8 개의 새로운 트리를 추가하고 12 개를 얻었으므로 혼란 스러웠습니다.
그 외에도 world.tiles 파일을 가지고있는 world.txt 파일이 있습니다.
세계 클래스는 여기에 있습니다 :! 하나 추가! 엔티티가 내 게임에 추가됩니다! 2! 엔티티
public class World {
private Handler handler;
private int width, height;
private int spawnX, spawnY;
private int[][] tiles;
//Entities
private EntityManager entityManager;
public World(Handler handler, String path){
this.handler = handler;
entityManager = new EntityManager(handler, new Player(handler, 100, 100));
entityManager.addEntity(new Tree(handler, 16 * 64, 7 * 64));
entityManager.addEntity(new Tree(handler, 17 * 64, 7 * 64));
entityManager.addEntity(new Tree(handler, 18 * 64, 7 * 64));
entityManager.addEntity(new Tree(handler, 19 * 64, 7 * 64));
entityManager.addEntity(new Tree(handler, 16 * 64, 6 * 64));
entityManager.addEntity(new Tree(handler, 17 * 64, 6 * 64));
entityManager.addEntity(new Tree(handler, 18 * 64, 6 * 64));
entityManager.addEntity(new Tree(handler, 19 * 64, 6 * 64));
entityManager.addEntity(new Rock(handler, 100, 450));
loadWorld(path);
entityManager.getPlayer().setX(spawnX);
entityManager.getPlayer().setY(spawnY);
}
public void tick(){
entityManager.tick();
}
public void render(Graphics g){
int xStart = (int) Math.max(0, handler.getGameCamera().getxOffset()/Tile.TILEWIDTH);
int xEnd = (int) Math.min(width, (handler.getGameCamera().getxOffset() + handler.getWidth())/Tile.TILEWIDTH + 1);
int yStart = (int) Math.max(0, handler.getGameCamera().getyOffset()/Tile.TILEHEIGHT);
int yEnd = (int) Math.min(height, (handler.getGameCamera().getyOffset() + handler.getHeight())/Tile.TILEHEIGHT + 1);
for(int y = yStart;y < yEnd;y++){
for(int x = xStart;x < xEnd;x++){
getTile(x, y).render(g, (int) (x * Tile.TILEWIDTH - handler.getGameCamera().getxOffset()),
(int) (y * Tile.TILEHEIGHT - handler.getGameCamera().getyOffset()));
}
}
//Entities
entityManager.render(g);
}
public Tile getTile(int x, int y){
if(x < 0 || y < 0 || x >= width || y >= height)
return Tile.grassTile;
Tile t = Tile.tiles[tiles[x][y]];
if(t == null)
return Tile.dirtTile;
return t;
}
private void loadWorld(String path){
String file = Utils.loadFileAsString(path);
String[] tokens = file.split("\\s+");
width = Utils.parseInt(tokens[0]);
height = Utils.parseInt(tokens[1]);
spawnX = Utils.parseInt(tokens[2]);
spawnY = Utils.parseInt(tokens[3]);
tiles = new int[width][height];
for(int y = 0;y < height;y++){
for(int x = 0;x < width;x++){
tiles[x][y] = Utils.parseInt(tokens[(x + y * width) + 4]);
}
}
}
public int getWidth(){
return width;
}
public int getHeight(){
return height;
}
public EntityManager getEntityManager() {
return entityManager;
}
}
내 EntityManager의 클래스는 여기에 있습니다 : 나는 트리 클래스를 만든 곳
는import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Comparator;
import dev.blaze.tilegame.Handler;
import dev.blaze.tilegame.entity.creatures.*;
public class EntityManager {
private Handler handler;
private Player player;
private ArrayList<Entity> entities;
private Comparator<Entity> renderSorter = new Comparator<Entity>(){
@Override
public int compare(Entity a, Entity b) {
if(a.getY() + a.getHeight() < b.getY() + b.getHeight())
return -1;
return 1;
}
};
public EntityManager(Handler handler, Player player){
this.handler = handler;
this.player = player;
entities = new ArrayList<Entity>();
addEntity(player);
}
public void tick(){
for(int i = 0;i < entities.size();i++){
Entity e = entities.get(i);
e.tick();
if(!e.isActive())
entities.remove(e);
}
entities.sort(renderSorter);
}
public void render(Graphics g){
for(Entity e : entities){
e.render(g);
}
}
public void addEntity(Entity e){
entities.add(e);
}
//GETTERS SETTERS
public Handler getHandler() {
return handler;
}
public void setHandler(Handler handler) {
this.handler = handler;
}
public Player getPlayer() {
return player;
}
public void setPlayer(Player player) {
this.player = player;
}
public ArrayList<Entity> getEntities() {
return entities;
}
public void setEntities(ArrayList<Entity> entities) {
this.entities = entities;
}
}
나는 오류가 EntityManager의 클래스에서 생각하지 않습니다, 그것은 수 있습니다 , 또는 그냥 일식의 오류.
트리 클래스는 여기에 있습니다 :
public class Tree extends StaticEntity {
public Tree(Handler handler, float x, float y) {
super(handler, x, y, Tile.TILEWIDTH, Tile.TILEHEIGHT * 2);
bounds.x = 0;
bounds.y = 0;
bounds.width = width;
bounds.height = height;
}
@Override
public void tick() {
}
@Override
public void die(){
}
@Override
public void render(Graphics g) {
g.drawImage(Assets.log, (int) (x - handler.getGameCamera().getxOffset()), (int) (y - handler.getGameCamera().getyOffset()), width, height, null);
}
}
당신이 다른 클래스를 알고있는 코멘트 말해해야하는 경우.
잘 보자 그 EntityManager의 클래스가 너무 적어도. 또한 정확히이 메소드가 너무 많은 항목을 추가한다는 힌트를 제공합니다. 메모리의 디버거보기? 일부 기능의 출력? –
내가 얻는 힌트는 내가 블록을 채광하면 두 개의 블록을 채굴하고 타일이 3 개가 아니라 2 개를 덮는 것이다. 모든 타일은 두 개의 타일 크기이며, 겹쳐서 3 개가 있고 4 개가 아닙니다. @BrunoDelor –
엔티티의 중복을 초래할 것으로 보이는 항목이 없습니다. IDE의 디버그 기능을 사용하여 프로그램이 실행될 때 프로그램의 상태를 확인하십시오. 목록에 필요한 엔티티 만 포함 된 경우 이는 실수가 마이닝을 관리하는 코드를 향한 것임을 의미합니다. –