2015-12-07 102 views
0

控制器类:for循环构造也没有创造敌人的一排无法生成敌人的排,产生只有一个敌人:

package com.game.src.main; 

    import java.awt.Graphics; 
    import java.util.LinkedList; 
    import java.util.Random; 

    public class Controller 
    { 
     private LinkedList<Enemy> e = new LinkedList<Enemy>(); 

     Random r = new Random(); 

     Enemy TempEnemy = null; 

     Game game; 
     Textures tex; 

     public Controller(Game game, Textures tex) 
     { 
      this.game = game; 
      this.tex = tex; 

      **for(int x = 0; x < (Game.WIDTH * Game.SCALE); x += 21) 
       addEnemy(new Enemy(x, 200, tex));** 
     } 

     public void tick() 
     { 
      for(int i = 0; i < e.size(); i++) 
       TempEnemy = e.get(i); 

      TempEnemy.tick(); 
     } 

     public void render(Graphics g) 
     { 
      for(int i = 0; i < e.size(); i++) 
       TempEnemy = e.get(i); 

       TempEnemy.render(g); 
     } 

     public void addEnemy(Enemy block) 
     { 
      e.add(block); 
     } 

     public void removeEnemy(Enemy block) 
     { 
      e.remove(block); 
     } 
    } 

我。它应该做什么,它应该呈现出一排敌人精灵,而是呈现最后一个在屏幕的最右角。 :\敌对阶级是如下:

package com.game.src.main; 

import java.awt.Graphics; 

public class Enemy 
{ 
    private int x = 0; 
    private int y = 0; 
    private Textures tex = null; 

    public Enemy(int x, int y, Textures tex) 
    { 
     this.x = x; 
     this.y = y; 
     this.tex = tex; 
    } 

    public void tick() 
    { 
     y+= 3; 
     if(y >= (Game.HEIGHT * Game.SCALE)) 
      y = 0; 
    } 

    public void render(Graphics g) 
    { 
     g.drawImage(tex.spike, x, y, null); 
    } 
} 

质感一流:

package com.game.src.main; 

import java.awt.image.BufferedImage; 

public class Textures 
{ 
    public BufferedImage player, spike; 

    private SpriteSheet ss; 

    public Textures(Game game) 
    { 
     ss = new SpriteSheet(game.getSpriteSheet()); 
     getTextures(); 
    } 

    private void getTextures() 
    { 
     player = ss.grabImage(1, 1, 44, 65); 
     spike = ss.grabImage(1, 3, 21, 65); 

    } 

    public void setUp() 
    { 
     player = ss.grabImage(3, 1, 43, 65); 
    } 

    public void setDown() 
    { 
     player = ss.grabImage(1, 1, 43, 65); 
    } 

    public void setLeft() 
    { 
     player = ss.grabImage(5, 1, 43, 65); 
    } 

    public void setRight() 
    { 
     player = ss.grabImage(7, 1, 43, 65); 
    } 
} 
+0

只是一个问题在我的身边:你为什么要使用TempEnemy变量?你可以写'e.get(i).render(g)'或'e.get(i).tick()'或者我错过了什么? – Mischa

+0

有趣的是,我不知道我可以直接使用你提到的方法。检查后,它产生了一整行:D今天学习了一些东西。我认为额外的加载项变量TempEnemy正在创建问题:\但为什么? :\ – Xirexor

+0

你在答案中找到了答案^^ – Mischa

回答

2

BRACKETS!

更改此

public void render(Graphics g) 
    { 
     for(int i = 0; i < e.size(); i++) 
      TempEnemy = e.get(i); 

      TempEnemy.render(g); 
    } 

这个

public void render(Graphics g) 
    { 
     for(int i = 0; i < e.size(); i++){ 
      TempEnemy = e.get(i); 
      TempEnemy.render(g); 
     } 
    } 

PS:总是写括号内为周期,if语句等等,即使你只需要执行一条线。你避免了这种挣扎。


而且你不需要“TempEnemy”,这个代码是相同的:

public void render(Graphics g) 
    { 
     for(int i = 0; i < e.size(); i++){ 
      e.get(i).render(g); 
     } 
    } 
+0

他的'tick()'方法也错过了方括号 –

+0

@ MuratK。 - 是的,可能会有多个丢失的括号,我不会检查他所有的代码,他应该在所有地方添加括号,正如我提到的那样,他会好的:)。 – libik

+0

谢谢!试过了,我想TempEnemy.render(g);必须在之前以外,但由于它呈现每个敌方物体,所以它必须包含在身体中! – Xirexor