【问题标题】:move() method in paddle game划桨游戏中的 move() 方法
【发布时间】:2014-04-19 22:05:00
【问题描述】:

目前正在为我的划桨游戏中的球类实现 move() 方法。 桨游戏是一种底部有桨的游戏,可以向左/向右移动。球从三堵墙上反弹。我意识到我的 move 方法是错误的,想知道是否有人可以指出我实现它的正确方法。我需要考虑球何时从侧面和顶部反弹

编辑:我玩弄了我的代码,但它仍然没有从墙上反弹

我的代码:

    if (this.y+speed<=0+radius)     //Checking for top          
    {
        System.out.println("in y"); //Checking if it's in this condition
        flipYDir();  


    }
    else if (this.x+speed<=0+radius) //Checking for left wall
    {
        System.out.println("in x<"); //Checking if it's in this condition
        flipXDir();


    }
    else if (this.x+speed<courtWidth-radius) //Checking for right wall
    {
        System.out.println("in x>"); //Checking if it's in this condition
        flipXDir();

    }
    else  //Update move
    {
    x+=speed*xDir;
    y+=speed*yDir;
    }

【问题讨论】:

  • 这有什么问题?您是否尝试过使用它,如果是,那么它在做什么错了?
  • 我的讲师提供了一个测试员课程。测试人员说顶部弹跳不正确,左侧弹跳不正确。但由于某种原因,向右弹跳是正确的。
  • 您可能希望提供所描述的正确行为,但您的教练。此外,您可能希望通过在每个步骤中插入显示xyspeeddir 值的几个打印语句来创建代码行为的跟踪。此外,问题可能出在 move 方法之外。最后,但与您的问题无关,我将实施xSpeedySpeed,因此您的前两个if/then 子句折叠为x += xSpeed; y += ySpeed;。翻转减少到xSpeed *= -1

标签: java methods


【解决方案1】:

这里有几个问题:

  • 由于您向 x 和 y 添加相同的值(速度),因此您的球总是会以 45 度角精确移动。不过,这可能就是您想要的……

  • 您正在检查 x==0 和 x==courtWidth,并在那时反转方向,但是如果 x=17、courtwidth=20、xDir =1 和 speed=5 会怎样?当你增加 x 时,它将是 22,它永远不会完全等于 Courtwidth,只会永远增加。您必须以某种方式处理它没有准确落在球场边缘的情况。

  • 您可能不想在所有三堵墙上同时翻转 X 和 Y 方向 - 如果这样做,无论球击中何处,球都会直接反弹回原来的方向

【讨论】:

  • 我明白你在说什么,但我不确定如何实施。你的第三点我明白了,我改变了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多