2016-01-01 2 views
1

Я пытаюсь определить, попал ли игрок в блок, и если да, то конечно их остановит (например, если он попадает в стену слева, не может двигаться влево). Так что все работает отлично, я столкнулся с проблемой вверх и вниз, но по какой-то причине, когда я продолжаю делать столкновение с левой стороны (последний оператор if), игрок может просто перемещаться по блоку, а я не могу понять, почему, потому что оператор if в основном тот же.То же самое, если инструкция при обнаружении столкновений не работает с различными переменными

FYI: рХ является й Координатой игрока, ру является у Координата игрока, XNY [1] является у Координаты блока, XNY [0] х - координировать блока, 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 
+0

Можете ли вы добавить, как вы определили collisionArray? – Rockybilly

+0

О, я забыл упомянуть, что collisionArray только что определен в начале кода как пустой список, затем материал добавляется к нему, как показано в коде – TMJ

+0

, используйте 'print', чтобы узнать, какие у вас есть значения - возможно, существуют разные значения, чем вы ожидаете. – furas

ответ

0

Я получил это работает! Это была глупая ошибка с моей стороны, вместо того, чтобы писать y_change = 0, это должно было быть x_change = 0. Ooops!

Смежные вопросы