冲突检测中的相同if语句在使用不同变量时不起作用

2024-04-20 05:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图检测玩家是否撞到了挡块,如果是,当然要阻止他们(例如,如果它撞到了左边的墙,它就不能向左移动)。所以它工作得很好,我已经做了上下的碰撞,但是由于某种原因,当我继续做左侧的碰撞(最后一个if语句)时,玩家可以通过这个块移动,我不知道为什么,因为if语句基本上是一样的。你知道吗

仅供参考:pX是玩家的x坐标, pY是玩家的y坐标, XnY[1]是块的y坐标, XnY[0]是块的x坐标, playerSize是正方形,所以50x50

    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

Tags: andpyfalseif玩家elementwidthblock