我正在开发一款游戏,在屏幕上运行不同的位图(SurfaceView)。由于它们具有不同的速度,有时会叠加两个字符,一个在另一个之后。我已经使用OnTouch功能来捕捉玩家触摸角色的那一刻。然而,当两个角色叠加时,我总是“触摸”后面的那个,我从不接触到他面前的另一个角色。为什么?我怎么能改变这种行为?因为我正在触摸前面的那个,所以我总是触摸另一个后面真的很烦人。 我希望问题很清楚。
谢谢!
编辑:这是我的OnTouchEvent函数:
@Override
public boolean onTouchEvent(MotionEvent event){
synchronized (getHolder()) {
boolean chibi_toccato = false;
if (!blocco_tocco){
//这里我有包含要显示的chibis的结构(Vector)
for (int i = (mChibiVector.size() - 1); i >= 0; i--) {
Chibi chibi = mChibiVector.elementAt(i);
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (!chibi_toccato){
// touch是一个标志,用于判断是否在
之前触摸了一个chibi if (chibi.touched) {
//如果我触摸船位图(屏幕上的某个地方),赤壁将是安全的
int navexend = posiz_nave_x + thread.mNave.getWidth();
int naveyend = posiz_nave_y + thread.mNave.getHeight();
if ((int) event.getX() >= posiz_nave_x &&
(int) event.getX() <= navexend &&
(int) event.getY() >= posiz_nave_y &&
(int) event.getY() <= naveyend){
chibi.chibisalvo = true;
thread.calcola_vel_x(chibi);
thread.calcola_vel_y(chibi);
} else {
chibi.touched = false;
int temp_chibi_y = chibi.getCoordinate().getY();
chibi.getCoordinate().setY(
temp_chibi_y +
chibi.getBitmapDimensions()[1]);
}
chibi_toccato = true;
} else {
// Here I check if a chibi is touched:
chibi = thread.checkTouched(chibi, (int) event.getX(),
(int) event.getY());
if (chibi.touched){
// If the chibi is touched, I save the X-Y info:
chibi.getCoordinate().setTouchedX((int) event.getX());
chibi.getCoordinate().setTouchedY((int) event.getY());
int temp_chibi_y = chibi.getCoordinate().getY();
chibi.getCoordinate().setY(
temp_chibi_y -
chibi.getBitmapDimensions()[1]);
chibi_toccato = true;
}
}
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (chibi.touched){
chibi_toccato = false;
int navexend = posiz_nave_x + thread.mNave.getWidth();
int naveyend = posiz_nave_y + thread.mNave.getHeight();
if ((int) event.getX() >= posiz_nave_x &&
(int) event.getX() <= navexend &&
(int) event.getY() >= posiz_nave_y &&
(int) event.getY() <= naveyend){
chibi.chibisalvo = true;
thread.calcola_vel_x(chibi);
thread.calcola_vel_y(chibi);
}
}
}
}
}
}
return true;
}
答案 0 :(得分:1)
好吧,过了一会儿,我终于得到了这个问题。问题出在for循环中:
for(int i =(mChibiVector.size() - 1); i&gt; = 0; i - )
由于我开始从矢量的末尾选择帧,因此第一次触摸始终位于其他帧后面的图像上。我仍然想知道为什么,但最后我改变了从第一个矢量项开始到结束的for循环并且它有效。
希望它对其他人有用。