[英]How to create free game collision with pyglet?
就我正在處理的東西而言,我已經開始研究與Terraria相當的2d游戲。 我的問題如下:世界由瓷磚/磚塊組成,然后有玩家。 我似乎找不到找到使玩家與瓷磚碰撞的方法,為什么不設置地面水平? 因為如果玩家下方沒有瓷磚,他應該掉下來,而如果玩家在山上怎么辦? 長話短說,我需要一種使玩家與他們下面的瓷磚碰撞的方法。
所以,這就是我嘗試的方法:制作一個簡化的網格以驗證the是否是下面的圖塊,一個for循環,在該循環中,我將所有圖塊與玩家的腳進行了比較,但該數據太多,無法提供數據,我找不到辦法也就是說要檢查玩家下方,上方,左側和右側的磁貼,以及僅查看那些位置。 我將嘗試顯示有用的代碼,但由於無法粘貼所有文件,因此會有些混亂。
class Physics:
@classmethod
def fall(cls, dt, o, world, mod):
if world.grid_fill[(o.grid_pos[0], o.grid_pos[1]-1)] == "Filled":
o.falling = False
else:
o.y -= o.height//8*dt
o.update_pos(o.x, o.y)
@classmethod
def run_physics(cls, dt, o, world):
for obj in o:
Physics.fall(dt, obj, world, None)
# player and Physics are in 2 different files as is world and the main loop
class Player:
def __init__(self, sprite, x, y, world):
self.img = sprite
self.img.set_position(x, y)
self.key_handler = key.KeyStateHandler()
self.type = "Player"
self.x = x
self.y = y
self.pos = (self.x, self.y)
self.grid_pos = world.pix_cords[self.pos]
self.width = self.img.width
self.height = self.img.height
self.speed = self.width//4
self.falling = False
def update_pos(self, x, y):
self.img.set_position(x, y)
def draw(self):
self.img.draw()
def check_fall(self, tile):
if self.y - self.height//2 == tile.y + tile.height:
return False
else:
return True
def update(self):
if self.key_handler[key.A]:
self.x -= self.speed
if self.key_handler[key.D]:
self.x += self.speed
if self.key_handler[key.W]:
self.y += self.speed
self.update_pos(self.x, self.y)
在您說之前,我沒有顯示地面是如何形成的,這是因為我可以通過僅說說它是使用批處理繪制並且所有子畫面小錐角都位於該子畫面居中來解釋這一點。 好的,當我運行這段代碼時,播放器會無限期掉落,但是當它下面有一塊瓷磚時,我希望它停止。
如果您需要查看磁貼的批處理,但我不知道是否需要,並且如果您看到關於此如何寫的任何非專業知識,我總是樂於學習如何更專業地編寫。
這是一個愚蠢的問題。 只需要基於塊而不是精靈創建一個簡化的定位系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.