在我的应用程序中,我有一些可拖动的精灵,有些在同一级别,其他分为不同的层,所有都叠在一起。 当我拖动一个时,我需要这个精灵总是出现在foregorund上。
如果我拍摄第二层上的精灵(例如)并且我需要将它放在第一层中的另一个字母上,我需要在第二个字母上显示我正在触摸的那个。我想我需要在if on
中的“onAreaTouched”中以编程方式更改图层if(pSceneTouchEvent.isActionDown()) {
//TOCCO DELLO SPRITE
}
但是怎么样?或者是否存在将当前触摸的精灵设置为foregorund的命令?
修改 根据skyuzo我试过这种方式。 在我的主要活动中,我定义了两个不同的层,一个用于所有精灵,另一个用作前景
Entity base = new Entity();
Entity foreground = new Entity();
scene.attachChild(base);
scene.attachChild(foreground);
spriteV = vRes.initSprite(tRegionV, scene, base, foreground); //this invoce a method that initialize a vector containing all my sprites
for(int x=0;x<spriteV.size();x++){
base.attachChild(spriteV.elementAt(x)); //here i attach every sprite to the scene
}
在另一个类中我已经为每个sprite定义了onAreaTouched并且我已经这样做了
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionDown()){
//TOCCO DELLO SPRITE
if(getY()<=261 )
setPosition(pSceneTouchEvent.getX() - this.getWidth() / 2, pSceneTouchEvent.getY()
- gap);
}
//switch layer
base.detachChild(sprite);
fore.attachChild(sprite);
}
if(pSceneTouchEvent.isActionMove()){
//MOVIMENTO DELLO SPRITE
setPosition(pSceneTouchEvent.getX() - this.getWidth() / 2, pSceneTouchEvent.getY()
- gap);
}
if(pSceneTouchEvent.isActionUp()){
//RILASCIO DELLO SPRITE
float x =getX();
float y =getY();
if(y<=261 ){
if(y>sY-20 && y<sY+20 && x>sX-20 && x<sX+20){
return true;
}
else {
val=fallInCell(x,y,this.getHeight());
setPosition(val[0],val[1]);
}
}
//switch layer
fore.detachChild(sprite);
base.attachChild(sprite);
}
return true;
}
};
aux.addElement(sprite);
}
return aux;
}
但是当我触摸精灵时我的应用程序强制关闭。这里有logcat错误 LOGCAT ERROR http://i41.tinypic.com/ob02t0.png
答案 0 :(得分:1)
你可以有两个图层:一个包含所有非前景精灵,另一个包含你的前景精灵。
实施例
void initScene() {
scene.attachChild(spriteLayer);
scene.attachChild(foregroundLayer);
}
void spriteTouched(Sprite sprite) {
spriteLayer.detachChild(sprite);
foregroundLayer.attachChild(sprite);
}
void spriteUntouched(Sprite sprite) {
foregroundLayer.detachChild(sprite);
spriteLayer.attachChild(sprite);
}
答案 1 :(得分:0)
我已经解决了我的第二个问题!
EngineOptions eo = new EngineOptions(true, ScreenOrientation.LANDSCAPE,
new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
eo.getTouchOptions().setRunOnUpdateThread(true);
有关如何正确删除精灵的详细信息,请参阅http://code.google.com/p/andengineexamples/source/browse/src/org/anddev/andengine/examples/SpriteRemoveExample.java
答案 2 :(得分:0)
请尝试阅读:http://javaprogrammernotes.blogspot.com/2015/04/how-to-put-sprite-on-top-in-andengine.html。可以在没有破坏/附加的情况下将sprite放在顶部但只使用setOnTop(true)。