首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >碰撞检测中相同的if语句不能工作/不同的变量

碰撞检测中相同的if语句不能工作/不同的变量
EN

Stack Overflow用户
提问于 2016-01-01 13:29:33
回答 1查看 132关注 0票数 1

我正在试着检测玩家是否击中了障碍物,如果是的话,当然要阻止他们(例如,如果它撞到左边的墙,它就不能向左移动)。所以它很好,我做了上下碰撞,但是由于某种原因,当我继续做左边的碰撞时(最后一个if语句),玩家就能通过这个块移动,我不知道为什么,因为if语句基本上是相同的。

FYI: pX是玩家的x坐标,pY是玩家的y坐标,XnY1是块的y坐标,XnY是块的x坐标,playerSize是正方形,所以50x50。

代码语言:javascript
运行
复制
    level =  ["W","W","W","W","W","W","W","W","W","W","W","W",
              "N","N","N","N","N","N","N","N","N","N","N","N","L",
              "N","N","N","N","N","N","N","N","N","N","N","N","L",
              "N","N","N","N","N","N","N","N","N","N","N","N","L",                                       
              "N","N","N","N","N","N","N","N","N","N","N","N","L",                                     
              "N","N","N","N","N","N","P","N","N","N","N","N","L",
              "N","N","N","N","N","N","N","N","N","N","N","N","L",
              "N","N","N","N","N","N","N","N","N","N","N","N","L",
              "N","N","N","N","N","N","N","N","N","N","N","N","L",
              "N","N","N","N","N","N","N","N","N","N","N","N","L",
              "N","N","N","N","N","N","N","N","N","N","N","N","L","S"]    
blockXY = []

    for element in level:
        if element == "N":
             x += block_width
        if element == "L":                                              
             y += block_height
             x = 0
        if element == "P": 
            drawBlock(block_width,block_height,x,y)                
            blockXY.append(x)
            blockXY.append(y)
            if appendBlockXY:
                if len(collisionArray) > P_count:
                    del(collisionArray[P_count])
                    print(collisionArray)
                    appendBlockXY = False
                collisionArray.append(blockXY)
            blockXY = []
            x += block_width
        if element == "S":
            y = 0


for XnY in collisionArray

        if pX >= XnY[0] and pX <= XnY[0] + block_width or pX + playerSize >= XnY[0] and pX <= XnY[0] + block_width:

            if pY - block_height == XnY[1]:
                canMoveUp = False
                y_change = 0

        if pX >= XnY[0] and pX <= XnY[0] + block_width or pX + playerSize >= XnY[0] and pX <= XnY[0] + block_width:

            if XnY[1] - playerSize == pY:
                canMoveDown = False
                y_change = 0

        if pY >= XnY[1] and pY <= XnY[1] + block_height or pY +  playerSize >= XnY[1] and pY + playerSize <= XnY[1] + block_height:

            if pX - block_width == XnY[0]:
                canMoveLeft = False
                y_change = 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-02 12:29:37

我让它起作用了!对我来说,这是一个愚蠢的错误,而不是写y_change = 0,而应该是x_change =0。哦哦!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34556539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档