有点长,但我不想找一个复制粘贴的答案。我只是想知道一个很好的方法。为视觉首选项粘贴的代码。你知道吗
以更好的方式。我的图像与另一个图像冲突,该对象表示瓷砖(地板/屋顶/墙等)。你知道吗
我把这些瓷砖放在屏幕的不同位置。我使用rect对象存储这些位置,并将它们存储到名为terrain
的列表中。
所以我遍历我的列表,当我遇到我的英雄和某个地形物体的碰撞时,停止移动。你知道吗
我现在意识到这是个问题。当这种情况发生,我确实碰撞,我不能再移动我的对象,它被卡住了。你知道吗
所以当我的物体与某个物体相撞时,我怎样才能让它继续运动呢。不允许它继续朝着同一方向前进。你知道吗
以下是运动控制的主要部分:
moveDown
语句是我尝试实现它的部分。floorCollusion
是5个假布尔的列表。你知道吗
#0 represents - no collision
#1 " " - top face has collided
#2 " " - right face has collided
#3 " " - bottom face has collided
#4 " " - left face has collided
我知道我有二进制运算。要么我搬家,要么我不搬家。我就是想不出别的办法来实现这个。你知道吗
你不需要添加代码。一个如何看到这一点的基本想法将不胜感激。你知道吗
moveDown = False
moveUp = False
moveLeft = False
moveRight = False
#when key down either move the hero or quit game
elif event.type == KEYDOWN:
if event.key in (K_UP, K_w):
moveDown = False
moveUp = True
playerObj['jumping'] = True #@@@@@@
elif event.key in (K_DOWN,K_s):
moveUp = False
moveDown = True
elif event.key in (K_LEFT, K_a):
moveRight = False
moveLeft = True
#if the image is not facing left, display the left img
if (playerObj['facing']) != LEFT:
playerObj['surface'] = L_HERO_IMG
playerObj['facing'] = LEFT
elif event.key in (K_RIGHT, K_d):
moveLeft = False
moveRight = True
#if the image is not facing right, display the right img
if (playerObj['facing']) != RIGHT:
playerObj['surface'] = R_HERO_IMG
playerObj['facing'] = RIGHT
elif event.key == K_ESCAPE:
terminate()
#testing hit point system
elif event.key == K_SPACE:
playerObj['health'] -= 3
if playerObj['health'] <= 0:
gameOver = True
#when key is lifted stop movement
elif event.type == KEYUP:
if event.key in (K_UP, K_w):
moveUp = False
elif event.key in (K_DOWN, K_s):
moveDown = False
elif event.key in (K_LEFT,K_a):
moveLeft = False
elif event.key in (K_RIGHT,K_d):
moveRight = False
#moving the hero
if not gameOver:
if moveLeft:
playerObj['x'] -= MOVERATE
if moveRight:
playerObj['x'] += MOVERATE
#if the player pressed key up or 'w' and hero isn't jump
#the hero will seems to have a jumping affect
if moveUp:
playerObj['y'] -= MOVERATE
if moveDown:
playerObj['y'] += MOVERATE
for i in range(len(terrain)):
tile = terrain[i]
if playerObj['rect'].colliderect(tile):
floorCollusion[2] = True
break
else:
floorCollusion[2] = False
if floorCollusion[2]:
playerObj['x'] -= MOVERATE
目前没有回答
相关问题 更多 >
编程相关推荐