为了让我熟悉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) {
再次感谢支持.