我在JAVA中构建我的第一个非常基本的游戏,而不使用任何其他外部库。 我得到的问题是
您可以看到背景是通过播放器呈现的,我该如何解决这个问题 播放器呈现代码如下
@Override
public void render(Graphics g) {
int bulletcount = 0;
//render player
g.setColor(color);
g.fillRect(x,y,32,32);
if(shooting) {
handler.add(new bullet(x + 8, y - 24, ID.bullet, handler));
bulletcount++;
}
}
和后台渲染代码如下。
public class background extends GameObject{
private int width;
private Random random = new Random();
public background(int x, int y , ID id,Handler handler){
super(x,y,id,handler);
valy = 2;
width = getWidth(x,800);
}
public void tick() {
y += valy;
if(y>650)
handler.remove(this);
}
public void render(Graphics g) {
g.setColor(Color.white);
g.fillRoundRect(x,y,width,10,1,1);
}
public int getWidth(int x,int width1){
int wid;
while(true){
if((width - x) > 35) {
wid = random.nextInt((width-x-35));
break;
}
else{
x -= 10;
}
}
return wid;
}
}
游戏的主要类别可以看到执行流程的顺序。
private void render() {
// render the Game
BufferStrategy bs = this.getBufferStrategy();
if(bs == null)
{
this.createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0,0,WIDTH,HEIGHT);
handler.render(g);
hod.render(g); //handler is rendering every object in game
g.dispose();
bs.show();
}
private void tick() {
//update Game
handler.tick();
hod.tick();
spawner.tick(); // background is generating in spawner class.
}
我知道用这么少的代码来解决问题对你们来说都很难。但我完全相信这个庞大而强大的社区。 p>
提前致谢。不要犹豫,编辑并指出我的错误谢谢!
答案 0 :(得分:0)
如果我得到正确的代码,则在渲染播放器后生成背景,导致背景位于播放器顶部。在调用hod.tick()之前,我会尝试调用spawner.tick()(我认为背景来自给定的代码注释)。希望这可以解决这个问题。
private void tick() { //update Game
spawner.tick();
handler.tick();
hod.tick();
}
答案 1 :(得分:0)
我刚刚解决了! 问题出在handler.render(g);方法: - 以下是
private void render(Graphics g){
for(int i =0; i<gameobj.size(); i++){//gameobj is linkedlist of GameObject
GameObject tempobj = gameobj.get(i);
tempobj.render(g);//getting every object and rendering them!
}
问题出在循环中,游戏中添加的第一个对象是播放器。所以,在渲染背景之后,它首先得到渲染。 这是一个愚蠢的错误。通过改变来做对了.-&gt;
private void render(Graphics g){
for(int i = gameobj.size()-1; i > 0; i--){//gameobj is linkedlist of GameObject
GameObject tempobj = gameobj.get(i);
tempobj.render(g);//getting every object and rendering them! from reverse
}
所以,最后一个对象首先呈现,第一个对象呈现最后一个。 和平!