微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 当给定75:android时,条件不会触发

好吧,所以这可能是一个愚蠢的问题,一个业余程序员试图尝试他的方式基本使用 Android图形,但在这里.

为了让我熟悉2D Android图形来帮助我的朋友,他希望我将他的想法用于他的游戏,我决定尝试制作一个简单版本的乒乓. (简单的意思我甚至没有让两个桨都移动)

离开Android API guides,我围绕一个具有3个ShapeDrawable对象(矩形)的自定义view对象(PongView)构建了实验应用程序.两个桨(我称之为棍棒)和球.我在一个视图中实现了一个MotionEventListener,并让左手杆随之移动(我想出了一些东西:).

之后,我通过使用在主活动中创建的延迟Runnable来移动球,该活动在自定义视图中调用更新方法.在更新方法中,我制作了一个碰撞处理程序,当它碰到屏幕的两侧或桨的任何一侧时,它会反转球的矢量(在特定的轴上).

但在玩完它后,我看到我的一个碰撞条件没有开火.球将穿过杆的底部和右侧,当它击中左侧或顶部时弹跳.

以下是碰撞条件:

//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:球方的边长(像素)
>宽度:桨的宽度
>高度:桨的高度
> bVectorX:在x轴上更新每次更新的坐标(像素)
> bx:球的x坐标
> by:球的y坐标
> lx:左侧球拍的x坐标

试图缩小问题范围,我评论了除了这个声明之外的所有声明,因为这句话给了我麻烦(至少在x轴上):

bx == lx + width

我意识到由于lx在运行时没有改变,我可以插入原始值(75)进行测试,看看是否会导致条件触发.它没有.所以我决定尝试76,然后猜猜是什么,它有效!我不知道为什么,但它有效.球在那条像素线处反弹.所以我尝试重新放入变量,尝试:

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

他们都工作了!然而,当我拿走一个/ – 1时,它会直接穿过桨并从击中另一侧弹出. (因为我所做的就是反转矢量).我想要它做的是击中桨的右侧并反转矢量.

我不知道为什么会发生这种情况,提前谢谢你的帮助:)

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

if (75 == 75) {

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

但这仍然永远不会真实.

if (bx == 75) {

再次感谢支持.

原文地址:https://www.jb51.cc/android/129232.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐