Я пытаюсь определить, попал ли игрок в блок, и если да, то конечно их остановит (например, если он попадает в стену слева, не может двигаться влево). Так что все работает отлично, я столкнулся с проблемой вверх и вниз, но по какой-то причине, когда я продолжаю делать столкновение с левой стороны (последний оператор 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
Можете ли вы добавить, как вы определили collisionArray? – Rockybilly
О, я забыл упомянуть, что collisionArray только что определен в начале кода как пустой список, затем материал добавляется к нему, как показано в коде – TMJ
, используйте 'print', чтобы узнать, какие у вас есть значения - возможно, существуют разные значения, чем вы ожидаете. – furas