我有3张图片,以300dp, 400dp和500dp的translationX开始。因此,当活动开始时,只有一个是可见的,其他两个在屏幕外(右边缘)。它们在处理程序中运行,每50毫秒将它们向左移动30dp。我需要做的是检测任何图像何时到达屏幕的左边缘减去 100dp,即屏幕外100dp,然后再次将它们设置到右边缘,加上 100dp。
我已经研究了几个小时了,我似乎找不到任何方法来告诉代码屏幕边缘在哪里。我发现了类似的问题,但他们似乎都已经有屏幕边缘存储在一个变量中,并试图用它做一些事情(没有显示他们如何得到这个变量)。
这是我一直在使用,它工作了一段时间,但经过几次后ki爆炸消失(突然只有2将显示,然后1,最后没有)…
public void kiBlastHandler() {
kiHandler = new Handler();
kiHandler.postDelayed(kiRunnable, 50);
}
private Runnable kiRunnable = new Runnable() {
@Override
public void run() {
if (gameRunning) {
// Ki Blasts
ImageView kiBlast1 = (ImageView) findViewById(R.id.kiBlast1);
ImageView kiBlast2 = (ImageView) findViewById(R.id.kiBlast2);
ImageView kiBlast3 = (ImageView) findViewById(R.id.kiBlast3);
// Ki blast movement
kiBlast1.setX(kiBlast1.getX() - currentSpeed);
kiBlast2.setX(kiBlast2.getX() - currentSpeed);
kiBlast3.setX(kiBlast3.getX() - currentSpeed);
// Images for lives
ImageView imgLives = (ImageView) findViewById(R.id.imgLives);
if (currentLives == 3) {
imgLives.setImageResource(R.drawable.lives_03);
} else if (currentLives == 2) {
imgLives.setImageResource(R.drawable.lives_02);
} else if (currentLives == 1) {
imgLives.setImageResource(R.drawable.lives_01);
}
// Ready the vibration for losing life
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Handle losing lives
if (kiBlast1.getTranslationX() == -1100) {
currentLives = (currentLives - 1);
v.vibrate(vibrateLives);
kiBlast1.setTranslationX(600);
}
if (kiBlast2.getTranslationX() == -1100) {
currentLives = (currentLives - 1);
v.vibrate(vibrateLives);
kiBlast2.setTranslationX(600);
}
if (kiBlast3.getTranslationX() == -1100) {
currentLives = (currentLives - 1);
v.vibrate(vibrateLives);
kiBlast3.setTranslationX(600);
}
}
// No lives left
if (currentLives == 0) {
if (gameRunning) {
gameRunning = false;
gameOver();
}
}
kiHandler.postDelayed(kiRunnable, 50);
}
};
有人能帮忙吗?我真的很感激! 感谢@MuhammadBabar的帮助,我能够解决这个问题。我用的是:
if (kiBlast1.getTranslationX() == -1100) {// etc }
当我应该使用getX()
函数时:
if (kiBlast1.getX() <= (viewMain.getX() - 100)) {// etc }
,它现在工作完美!我希望这能帮助其他人理解物体的坐标是如何工作的,因为它让我非常困惑!