Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 如果语句有奇怪的行为_If Statement_Smallbasic - Fatal编程技术网

If statement 如果语句有奇怪的行为

If statement 如果语句有奇怪的行为,if-statement,smallbasic,If Statement,Smallbasic,我在上课时滑冰被抓住了。我的惩罚是用小basic编程游戏 我现在有一排球,如果第一个球滚过小点。点将消失,你将获得一分。检查小球是否在小点上的if语句如下: If (foodX[x] - SnakeHeadX) < precision And (foodX[x] - SnakeHeadX) > -precision And (foodY[x] - SnakeHeadY) < precision And (foodY[x] - SnakeHeadY) > -precisio

我在上课时滑冰被抓住了。我的惩罚是用小basic编程游戏

我现在有一排球,如果第一个球滚过小点。点将消失,你将获得一分。检查小球是否在小点上的if语句如下:

If (foodX[x] - SnakeHeadX) < precision And (foodX[x] - SnakeHeadX) > -precision And (foodY[x] - SnakeHeadY) < precision And (foodY[x] - SnakeHeadY) > -precision Then
所以我得到了我的分数,但是当这个大球的x值和y值小于20时,我也得到了分数。不该有的东西

这就是场景(这个@是个大球)

正如你所看到的,大球不会碰到小点。但我确实得到了分数。
那为什么是真的?我该如何修复它呢?

听起来你好像在试图管理点击框。两个形状相互作用的地方。此外,您的方法似乎是计算两个对象之间的距离,如果距离低于thresh hold(精度变量),则将其计算为命中

我有两个建议:

  • 使用全距离公式。您当前正在检查X和Y 另外,我认为这是造成您问题的原因
  • 放弃距离,选择命中框。这需要一些非常重要的步骤 小Basic中的长且非常复杂的If语句 更多的控制
  • 样本:

    'Distance from centers
    distance = Math.SquareRoot(Math.Power(foodX[x] - SnakeHeadX,2) + Math.Power(foodY[x] - SnakeHeadY),2)
    If distance < precision Then
      'feed the snake
    EndIf
    
    'Hit boxes
    If SnakeHeadX > foodX[x] And SnakeHeadX < foodX[x] And SnakeHeadY > foodY[x] And SnakeHeadY < foodY[x] Then 'top left corner of snake
      If 'top right coner of the snake
        ' Repeat for all four corners of the snake
      EndIf
    endif
    
    距离中心的距离 距离=数学平方根(数学功率(foodX[x]-SnakeHeadX,2)+数学功率(foodY[x]-SnakeHeadY,2) 如果距离小于精度,则 喂蛇 恩迪夫 "打箱子", 如果蛇头x>foodX[x]和蛇头xfoodY[x]和蛇头Y
    如果这无助于澄清你的问题。您提供的详细信息越多,示例代码越多越好。

    如果您将其简化为
    If Math.Abs(foodX[x]-SnakeHeadX)---------------------------------------------------------------------------------------------
    |@                                           *
    |
    |                           *
    |                                                                       *
    |  *                                  *
    |
    |                                          *
    ---------------------------------------------------------------------------------------------
    
    'Distance from centers
    distance = Math.SquareRoot(Math.Power(foodX[x] - SnakeHeadX,2) + Math.Power(foodY[x] - SnakeHeadY),2)
    If distance < precision Then
      'feed the snake
    EndIf
    
    'Hit boxes
    If SnakeHeadX > foodX[x] And SnakeHeadX < foodX[x] And SnakeHeadY > foodY[x] And SnakeHeadY < foodY[x] Then 'top left corner of snake
      If 'top right coner of the snake
        ' Repeat for all four corners of the snake
      EndIf
    endif