У меня проблема с моим приложением.Я сложил несколько спрайтов разных размеров (их области текстуры также имеют разные размеры)
Если я уроню маленький спрайт на больший, все это будет работать нормально (маленький спрайт явно выше большего1) Если я хочу снова взять маленький спрайт, при касании я всегда перетаскиваю больший спрайт, даже если его уровень находится на более низком уровне, чем уровень меньшего спрайта.
Как можноЯ исправляю это?
Я уже пытался установить для меньшего спрайта размер области, такой же большой, как у большего спрайта, но это не сработало
просто, чтобы быть ясным, вот два скриншота
Красный "E" - это спрайт, который я переместил на синюю "кому".кома меньше, поэтому, когда я касаюсь «E», я перемещаю ее правильно
Во втором случае del blue «D» больше, чем «E», поэтому, когдая касаюсь его, я перемещаю «D», а не «E»
РЕДАКТИРОВАТЬ
вот как я создаю свои спрайты, все они хранятся в векторе
public Vector<Sprite> initSprite(Vector<TextureRegion> tRegionV, final Scene se, Context c){
Vector<Sprite> aux = new Vector<Sprite>();
vRes.posizioni = vRes.init();
for(int i=0; i<dataV.size(); i++ ){
final int gap = dataV.elementAt(i).gap+data[3]; //creo qui la differenza per il dito
final float sX = dataV.elementAt(i).x;
final float sY = dataV.elementAt(i).y;;
final String label = dataV.elementAt(i).label;
final Context co = c;
sprite = new Sprite(dataV.elementAt(i).x, dataV.elementAt(i).y, tRegionV.elementAt(i))
// gestione del drag & drop
{
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionDown()){
//TOCCO DELLO SPRITE
moved=false;
startY=getY();
startX=getX();
if(this.getParent()!=se.getChild(3) && this.getParent()==se.getChild(1)){
ChangeLayer(se, this, 1, 3);
}
else if(this.getParent()!=se.getChild(3) && this.getParent()==se.getChild(2)){
ChangeLayer(se, this, 2, 3);
}
MoveYModifier mod = new MoveYModifier(0.1f, getY(), pSceneTouchEvent.getY()- gap);
this.registerEntityModifier(mod);
}
if(pSceneTouchEvent.isActionMove()){
//MOVIMENTO DELLO SPRITE
moved=true;
setPosition(pSceneTouchEvent.getX() - this.getWidth() / 2, pSceneTouchEvent.getY()
- gap /*this.getHeight() / 2*/);
}
if(pSceneTouchEvent.isActionUp()){
//RILASCIO DELLO SPRITE
float x =getX() + (getWidth()/2);
float y =getY() + (getHeight()/2);
if(y<=285){
if(y>(sY+ getHeight()/2)-20 && y<(sY+ getHeight()/2)+20 && x>(sX+ getWidth()/2)-20 && x<(sX+ getWidth()/2)+20){
if(this.getParent()!=se.getChild(1) && this.getParent()==se.getChild(2)){
ChangeLayer(se, this, 2, 1);
}
return true;
}
else {
val=vRes.fallInCell(x,y,this.getHeight(),label);
setPosition(val[0]-(this.getWidth()/2),val[1]-(this.getHeight()/2)+6);
}
}
// if che se ho solo toccato e si è alzata, deve tornare dove stava
if(moved==false){
MoveYModifier mod = new MoveYModifier(0.1f, getY(), startY);
this.registerEntityModifier(mod);
setPosition(startX, startY);
}
if(this.getParent()!=se.getChild(1) && this.getParent()==se.getChild(3)){
ChangeLayer(se, this, 3, 1);
}
else if(this.getParent()!=se.getChild(1) && this.getParent()==se.getChild(2)){
ChangeLayer(se, this, 2, 1);
}
}
return true;
}
};
aux.addElement(sprite);
}
return aux;
}