python - 当玩家图像向左滚动时,敌人暴徒滚动?
问题描述
我的敌人有问题,当我的玩家滚动离开时,玩家滚动的敌人无论如何都可以解决这个问题,即使视频我的完整代码低于它的长度以适合这里
我试图做的是让我的敌人在我的窗口滚动时不要改变它的位置,它对左右做同样的事情一直跟随玩家
while runninggame:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
runninggame = False
[...]
# I did the same for my players key movement this part suppose to not make my player scroll
if playerman.y < 250:
playerman.y += 1
for platform in platforms:
platform.y += playerman.speed
for enemys in enemying:
enemys.y += playerman.speed
我的敌人阶级
class enemy:
def __init__(self,x,y,height,width,end):
self.x = x
self.y =y
self.esright = [pygame.image.load("esright1.png"),
pygame.image.load("esright1.png"),
pygame.image.load("esright2.png"),
pygame.image.load("esright3.png"),
pygame.image.load("esright4.png"),
pygame.image.load("esright5.png"),
pygame.image.load("esright6.png"),
pygame.image.load("esright7.png"),
pygame.image.load("esright8.png"),
pygame.image.load("esright9.png"),
pygame.image.load("esright10.png"),
pygame.image.load("esright11.png"),
pygame.image.load("esright12.png"),
pygame.image.load("esright13.png"),
pygame.image.load("esright14.png"),
pygame.image.load("esright15.png"),
pygame.image.load("esright16.png"),
pygame.image.load("esright17.png"),
]
self.esleft = [pygame.image.load("esleft1.png"),
pygame.image.load("esleft1.png"),
pygame.image.load("esleft2.png"),
pygame.image.load("esleft3.png"),
pygame.image.load("esleft4.png"),
pygame.image.load("esleft5.png"),
pygame.image.load("esleft6.png"),
pygame.image.load("esleft7.png"),
pygame.image.load("esleft8.png"),
pygame.image.load("esleft9.png"),
pygame.image.load("esleft10.png"),
pygame.image.load("esleft11.png"),
pygame.image.load("esleft12.png"),
pygame.image.load("esleft13.png"),
pygame.image.load("esleft14.png"),
pygame.image.load("esleft15.png"),
pygame.image.load("esleft16.png"),
pygame.image.load("esleft17.png"),
]
self.esright = [pygame.transform.scale(image,(image.get_width()//3,image.get_height()//3)) for image in self.esright]
self.esleft = [pygame.transform.scale(image,(image.get_width()//3,image.get_height()//3)) for image in self.esleft]
self.height = height
self.width = width
self.anim_index = 0
self.distance = 80
self.speed = 8
self.vel = 3
self.path = [x,end]
self.walking_index = 0
self.rect = pygame.Rect(x,y,height,width)
def draw(self,window):
self.move()
if self.Walking_index + 1 >= 33:
self.Walking_index = 0
if self.vel > 0:
window.blit(self.esright[self.Walking_index//3], (self.x,self.y))
self.Walking_index += 1
else:
window.blit(self.esleft[self.Walking_index//3], (self.x,self.y))
self.Walking_index += 1
def move(self):
if self.vel > 0:
if self.x + self.vel < self.path[1]:
self.x += self.vel
else:
self.vel = self.vel * -1
self.Walking_index = 0
else:
if self.x - self.vel > self.path[0]:
self.x += self.vel
else:
self.vel = self.vel * -1
self.Walking_index = 0
我在哪里定义了敌人类
black = (0,0,0)
enemys1 = enemy(550,436,50,50,300)
enemys = [enemys1]
我的完整代码很长,不适合这里的 脚本
解决方案
滚动敌人的位置是不够的。敌人的路径由间隔 ( self.path
) 限制。当敌人的 x 坐标达到self.path[0]
或self.path[1]
时,敌人转向:
if self.vel > 0: if self.x + self.vel < self.path[1]: self.x += self.vel else: self.vel = self.vel * -1 self.Walking_index = 0 else: if self.x - self.vel > self.path[0]: self.x += self.vel else: self.vel = self.vel * -1 self.Walking_index = 0
如果你滚动敌人,你也必须滚动路径。
scroll
向类添加一个方法enemys
。更改路径的位置和起点和终点:
class enemys:
# [...]
def scroll(self, sx, sy):
self.x += sx
self.y += sy
self.path[0] += sx
self.path[1] += sx
使用滚动敌人的方法:
runninggame = True
while runninggame:
# [...]
if playerman.y < 250:
playerman.y += 1
# [...]
for enemys in enemying:
enemys.scroll(0, playerman.speed)
if playerman.y > 450:
playerman.y -= playerman.fall
# [...]
for enemys in enemying:
enemys.scroll(0, -playerman.fall)
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
playerman.x -= playerman.speed
playerman.direction = "left"
# camera controll for left
if playerman.x < 100:
# [...]
for enemys in enemying:
enemys.scroll(playerman.speed, 0)
elif keys[pygame.K_d]:
playerman.x += playerman.speed
playerman.direction = "right"
# camera for right:
if playerman.x > 400:
playerman.x -= playerman.speed
# [...]
for enemys in enemying:
enemys.scroll(-playerman.speed, 0)
推荐阅读
- android - 获取 java.lang.ClassCastException:无法强制转换 android.widget.SimpleAdapter
- python - 使用 KeyboardInterrupt python 唤醒一个挂起的进程
- r - dplyr 在匿名函数中做多个绘图
- typescript - Ionic v3 Segment - 滚动时更改活动段
- javascript - 如何在nodejs v6中将顺序函数转换为并行执行
- tags - 开始和结束标签在乳胶中
- python - Odoo 10:如何在联系表单视图中制作单独的地址行?
- html - 溢出列
- javascript - 使用 Cordova Hybrid 应用程序将文件复制到路径
- c# - 为大型 xml 文件选择单节点方法