gpt4 book ai didi

java - 给定 75 : android 时条件不会触发

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:04 26 4
gpt4 key购买 nike

好吧,这可能是一个业余程序员提出的一个愚蠢的问题,他试图通过实验了解 Android 图形的基本使用,但就是这样。

为了让自己熟悉 2D Android 图形以帮助我的一位 friend 希望我将他的想法用于他的游戏,我决定尝试制作一个简单版本的乒乓球。 (简单的意思是我什至还没有让两个桨移动)

离开 Android API guides ,我围绕具有 3 个 ShapeDrawable 对象(矩形)的自定义 View 对象 (PongView) 构建了实验性应用程序。两个桨(我称它们为棍子)和球。我在 View 中实现了一个 MotionEventListener 并使左摇杆随之移动(是的,我想通了:)。

之后,我通过使用在调用自定义 View 内的更新方法的主 Activity 中创建的延迟 Runnable 让球移动。在更新方法中,我制作了一个碰撞处理程序,当它撞击屏幕的侧面或 Racket 的任何侧面时,它会反转球的 vector (在特定轴上)。

但在试用它之后,我发现我的其中一个碰撞条件没有触发。球会穿过棍子的底部和右侧,当它击中左侧或顶部时弹跳。

碰撞条件如下:

//collisions
if ((bx + bside == getMeasuredWidth() || bx == 0) || //hit right or left of screen
((bx + bside == lx || bx == lx + width) && (by < ly + height && by > ly)) || //hit left stick
((bx + bside == rx || rx + width == bx) && (by < ry + height && by > ry))) { //hit right stick
bVectorX = -bVectorX;
System.out.println("bounce x");
}
if ((by + bside == getMeasuredHeight() || by == 0) ||
((by + bside == ly || by == ly + height) && (bx < lx + width && bx > lx)) ||
((by + bside == ry || by == ry + height) && (bx < rx + width && bx > rx))) {
bVectorY = -bVectorY;
System.out.println("bounce y");
}
  • bside:球方 block 的边长(像素)
  • width:桨的宽度
  • height: 桨的高度
  • bVectorX:x 轴上每次更新的坐标(像素)变化
  • bx: 球的 x 坐标
  • 通过:球的y坐标
  • lx: 左桨的 x 坐标

为了缩小问题范围,我注释掉了除此语句之外的所有内容,因为此语句给我带来了麻烦(至少在 x 轴上):

bx == lx + width

我意识到,由于 lx 在运行时从未改变,我可以插入原始值 (75) 进行测试,看看是否会触发条件。它没有。所以我决定改用 76,猜猜看,它奏效了!我不知道为什么,但它奏效了。球在那条像素线上反弹。所以我试着把变量放回去,尝试:

bx == lx + width + 1
bx == lx + width - 1

他们都成功了!然而,当我拿走一个 +/- 1 时,它会直接穿过 Racket 并从击中另一侧弹开。 (因为我所做的只是反转 vector )。我想让它做的是击中 Racket 的右侧并反转 vector 。

我不知道为什么会这样,在此先感谢您的帮助:)

编辑:所以我测试了条件,发现这两段代码返回 true。

if (75 == 75) {

int i = 75;
if (i == 75) {

但这仍然不会返回 true。

if (bx == 75) {

再次感谢您的支持。 :)

最佳答案

您不应该检查是否完全相等,即 if (bx == 75) {}因为如果您的 bVectorX 满足此检测碰撞的条件具有非常有限的一组值(即,只有整数加上或减去 bx 才会始终使它成为值 75)。

只需使用 <=>=你应该没事的。

这同样适用于检测与屏幕边缘的碰撞。

关于java - 给定 75 : android 时条件不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com