第一次海報在這裏。pygame - 敵人與地面碰撞時飛出屏幕?
儘量保持這一點儘可能簡單。我試圖在pygame中做一個遊戲,但似乎我的碰撞檢測正在發生。我有一個玩家類,可以檢測玩家是否與地面或環境列表中的任何其他物體發生碰撞,並且我有一個與同一列表中的任何物品發生碰撞的敵人類。爲了嘗試擊中玩家,敵人確定了他們需要前進的方向。有很可能在問題中起重要作用的重力。
問題是,當'蒼蠅'被放入並落在地上時,即使它們的X和Y值看起來(根據屏幕上物品的日誌)不會移動所有?
作爲澄清,這兩個'蒼蠅'被放入第二個列表允許碰撞檢測。此外,作爲一個側面說明,「毛刺」不一樣,如果沒有左,右碰撞檢測,我認爲你的if/else
不正確,會出現...由於任何人誰可以提供幫助:)
def collisions():
#Detection Working as intended
for fly in Fly.List:
fly_proj = pygame.sprite.spritecollide(fly, Projectile.List, True)
if len(fly_proj) > 0:
for hit in fly_proj:
fly.health -= 100
X = pygame.sprite.spritecollide(fly, current_level.object_list, False)
if len(X) == 0: #Gravity here:
if (fly.vspeed == 0):
fly.vspeed = 1
print("Gravity")
else:
fly.vspeed += 0.35
if len(X) > 1:
for hit in X:
if fly.vspeed > 0:
fly.rect.bottom = hit.rect.top +1
fly.vspeed = 0
elif fly.vspeed < 0:
fly.rect.top = hit.rect.bottom -1
elif fly.hspeed > 0:
fly.rect.right = hit.rect.left
fly.hspeed = 0
elif fly.hspeed < 0:
fly.rect.left = hit.rect.right
fly.hspeed = 0
print(len(X),framecounter, fly.vspeed, fly.hspeed)
#Kill fly if health reaches 0
if fly.health <= 0:
fly.destroy(Fly)
#Detect where the player is
if window_rect.contains(fly.rect):
fly.playersnapshot = player.rect.x
if fly.rect.x - player.rect.x >= -10:
#print("LEFTING")
fly.hspeed = -2
if fly.rect.x - player.rect.x <= 10:
fly.hspeed = 2
fly.truefalse = True
event = None
fly.rect.y += fly.vspeed
fly.rect.x += fly.hspeed
可以同時飛'hspeed!= 0'和'vspeed!= 0'嗎?現在只有在'vspeed'爲零的情況下才檢查'hspeed'。 – furas