Android 如何拿起一个小的可拖动的雪碧堆在一个大的雪碧上,这个雪碧在安德尼也可以拖动
我的应用程序有问题。我已经堆叠了一些不同尺寸的精灵,它们的纹理区域也是不同尺寸的 如果我把一个小精灵放在一个大精灵上,一切看起来都很好——小精灵明显在大精灵的上面。如果我想再次拿起小精灵,当我触摸它时,我总是会拖拽大精灵,即使它的级别比小精灵的级别低 我怎样才能解决这个问题 我已经试着给小精灵设置一个和大精灵一样大的区域维度,但是没有成功 为了清楚起见,这里有两个屏幕截图: 红色E是我在蓝色昏迷中移动的精灵。昏迷较小,因此当我触摸E时,我正确地移动了它: 在第二种情况下,蓝色的D比E大,所以当我触摸它时,我移动的是D,而不是E 编辑 下面是我创建精灵的方法,所有精灵都存储在一个向量中:Android 如何拿起一个小的可拖动的雪碧堆在一个大的雪碧上,这个雪碧在安德尼也可以拖动,android,drag-and-drop,touch,sprite,andengine,Android,Drag And Drop,Touch,Sprite,Andengine,我的应用程序有问题。我已经堆叠了一些不同尺寸的精灵,它们的纹理区域也是不同尺寸的 如果我把一个小精灵放在一个大精灵上,一切看起来都很好——小精灵明显在大精灵的上面。如果我想再次拿起小精灵,当我触摸它时,我总是会拖拽大精灵,即使它的级别比小精灵的级别低 我怎样才能解决这个问题 我已经试着给小精灵设置一个和大精灵一样大的区域维度,但是没有成功 为了清楚起见,这里有两个屏幕截图: 红色E是我在蓝色昏迷中移动的精灵。昏迷较小,因此当我触摸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;
}
你可以用精灵的z排序来判断哪个在上面 d'z顺序是1 “e”z顺序为0 “e”z顺序比“d”低,所以你知道它在底部 在第一个对象N创建中,该对象N的初始z顺序为0 对于每个附加对象N 创建时检查
if (Object N) intersects with a previous object (object N-1).
(object N).z-order = (object N-1).z-order+1,
如果计划有多个对象重叠,则需要进行额外的检查
因此,当用户触摸时,检查触摸位置是否与对象相交
如果发生多个交点,请使用z阶最高的对象,如何确定这是顶部精灵,将此istead移到较低的位置?在没有看到您编码的情况下,我不知道您如何创建对象或定位对象或其他任何东西,但在第一次创建精灵对象时应设置顺序,然后在每次删除对象时更新顺序。我将用一个粗略的大纲来编辑我的答案。我已经为精灵声明添加了代码,并重新触摸了相关的内容。我已经学习了andengine拖放教程