[英]Monster Chase pygame
So here is my problem , I'm at the (very) beginning of making my Rogue like game and i'm stuck at making an enemy chase the player , it must be something easy and obvious but my skills are pretty low ... So here is my Monster class 所以这是我的问题,我处于使我的Rogue像游戏一样(非常)的开始,而我一直坚持让敌人追逐玩家,这一定很容易而且很明显,但是我的技能却很低...这是我的怪物课程
class monster():
def __init__(self , mright, mleft, mup, mdown):
self.mright = pygame.image.load(mright).convert_alpha()
self.mleft = pygame.image.load(mleft).convert_alpha()
self.mup = pygame.image.load(mup).convert_alpha()
self.mdown = pygame.image.load(mdown).convert_alpha()
self.sqrx = 7
self.sqry = 2
self.x = 210
self.y = 60
self.direction = self.mdown
char = character(right , left , up , down , Level)
def chase(self,direction):
if self.sqrx > char.sqrx :
self.sqrx -= 1
self.x = self.sqrx * size_sprite
self.direction = self.mleft
if self.sqrx < char.sqrx :
self.sqrx += 1
self.x = self.sqrx * size_sprite
self.direction = self.mright
if self.sqry > char.sqry :
self.sqry -= 1
self.y = self.sqry * size_sprite
self.direction = self.mup
if self.sqry < char.sqry :
self.sqry += 1
self.y = self.sqry * size_sprite
self.direction = self.mdown
And the Game Loop 和游戏循环
while gameon:
pygame.time.Clock().tick(30)
for event in pygame.event.get():
if event.type == QUIT:
gameon = 0
on = 0
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
gameon = 0
elif event.key == K_RIGHT:
char.move('right')
elif event.key == K_LEFT:
char.move('left')
elif event.key == K_UP:
char.move('up')
elif event.key == K_DOWN:
char.move('down')
level.display(window)
window.blit(monst.direction , (monst.x , monst.y))
window.blit(char.direction , (char.x , char.y))
pygame.display.flip()
You should use chase()
in mainloop - see comment in code 您应该在mainloop中使用chase()
-请参见代码中的注释
while gameon:
pygame.time.Clock().tick(30)
# --- events ---
for event in pygame.event.get():
if event.type == QUIT:
gameon = 0
on = 0
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
gameon = 0
elif event.key == K_RIGHT:
char.move('right')
elif event.key == K_LEFT:
char.move('left')
elif event.key == K_UP:
char.move('up')
elif event.key == K_DOWN:
char.move('down')
# - object events ---
# char.handle_event(event)
# --- updates ---
# HERE put all functions which change elements
# (but don't depend on events) like:
# - chasing player,
# - moving mosters,
# - detecting collisions,
# - animating other elements (ie. fire, water, etc.)
# --- draws all elements ---
level.display(window)
window.blit(monst.direction , (monst.x , monst.y))
window.blit(char.direction , (char.x , char.y))
pygame.display.flip()
See some templates of PyGame code 查看一些PyGame代码模板
In Moster I would use char
(player instance) as argument in 在Moster中,我将使用char
(玩家实例)作为参数
def __init__(self , char, ...):
self.char = char
to have access to its position all the time 一直可以访问其位置
or at least 或至少
def chase(self, direction, char):
to have access to player when you call chase()
调用chase()
时可以访问播放器
BTW: instead of gameon = 0
more readable is gameon = False
(and gameon = True
) 顺便说一句: gameon = False
(and gameon = True
)而不是gameon = 0
You could create draw()
in Moster()
and do 您可以在Moster()
创建draw()
Moster()
并执行
monst.draw(window)
instead of 代替
window.blit(monst.direction , (monst.x , monst.y))
Use CamelCase
names for classes ( class Monster():
) and lower_case
names for variables ( moster = Moster()
). 使用CamelCase
的类名( class Monster():
和lower_case
变量名称( moster = Moster()
It makes code more readable. 它使代码更具可读性。 See PEP 8 -- Style Guide for Python Code 请参阅PEP 8-Python代码样式指南
Like someone mentioned above - your indentation of setting the direction is causing it to call all 4 of the assignments every time chase
is called. 像上面提到的人-你的设置方向的压痕导致它调用任务每次的所有4 chase
被调用。 This essentially always sets direction = self.mdown
这基本上总是将方向设置为self.mdown
def chase(self,direction):
if self.sqrx > char.sqrx :
self.sqrx -= 1
self.x = self.sqrx * size_sprite
self.direction = self.mleft
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.