2012-04-22 49 views
1

演員下面沒有名字。在libgdx中,最好的方法是爲每個actor分配一個名稱?如何命名libgdx中的Actor?

public class JewelsMainActivity implements ApplicationListener, InputProcessor { 

private Vector2 point = new Vector2(); 
public TextureAtlas jewelsAtlas; 
public Texture jewels; 
private SpriteBatch batch; 
public Actor[][] actors = new Actor[10][10]; 
public Stage stage; 
public int gridSize; 

@Override 
public void create() { 
    stage = new Stage(800, 600, false); 
    gridSize = 10; 
    batch = new SpriteBatch(); 
    jewels = new Texture(Gdx.files.internal("assets/gems1.png")); 
    jewelsAtlas = new TextureAtlas(Gdx.files.internal("assets/pack")); 
    for (int z = 0; z < gridSize; z++) { 
     for (int x = 0; x < gridSize; x++) { 
       Random r = new Random(); 
       int j = r.nextInt(2)+1; 
       actors[x][z] = new Image(jewelsAtlas.findRegion(""+j+"")); 
       actors[x][z].x = x*56; //each gem is 56*56 width/height 
       actors[x][z].y = z*56; 

// actors [x] [z] .name =「actor」+ x + z; //不能使用這個上面,因爲它不會允許....

   stage.addActor(actors[x][z]); 

     } 
    } 
    Gdx.input.setInputProcessor(this); 
} 


@Override 
public void render() { 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 
     stage.draw(); 
     batch.end(); 
} 

@Override 
public boolean touchDown(int x, int y, int pointer, int button) { 
     stage.toStageCoordinates(Gdx.input.getX(), Gdx.input.getY(), point); 
     Actor actor = stage.hit(point.x, point.y); 
     if (actor != null){ 

      Gdx.app.log("name", actor.name); 

//的actor.name是空

  Gdx.app.log("hashCode", ""+actor.hashCode()); 
      ((Image)actor).color.set((float)Math.random(), (float)Math.random(), (float)Math.random(), 0.5f + 0.5f * (float)Math.random()); 
     } 
    return false; 
} 

.... .... ...

}

回答

2

該名稱是最終的,因此必須在構造函數中定義。

如果你有

actors[x][z] = new Image(jewelsAtlas.findRegion(""+j+""));

使用

actors[x][z] = new Image(jewelsAtlas.findRegion(""+j+""), Scaling.none, Align.CENTER, "myawesomenewname");

+0

感謝置頂! – user1320651 2012-04-22 16:33:43