Почему тип врага «червь» не виден в моей игре PyGame?Python

Программы на Python
Ответить
Anonymous
 Почему тип врага «червь» не виден в моей игре PyGame?

Сообщение Anonymous »

червь вражеского типа должен ходить в пределах заданной границы слева направо.
это два наиболее важных сценария игры. сценарий Main.py и sprites.py Где-то здесь должна быть причина, по которой черви не отображаются. спасибо за помощь.
Я уже пытался изменить все в руководстве с pygame-ce на pygame, поскольку у меня нет pygame-ce (да, в настоящее время я следую руководству, чтобы изучить pygame). Вначале все враги были невидимы. После изменения кода пчелы теперь видны, но черви в большей степени полагаются на мой плиточный файл. И мне нужно разобраться с Tiled.
from settings import *
from sprites import *
from groups import AllSprites
from support import *
from timer import Timer
from random import randint

class Game:
def __init__(self):
pygame.init()
self.display_surface = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption('Platformer')
self.clock = pygame.time.Clock()
self.running = True

# groups
self.all_sprites = AllSprites()
self.collision_sprites = pygame.sprite.Group()
self.bullet_sprites = pygame.sprite.Group()
self.enemy_sprites = pygame.sprite.Group()

# load game
self.load_assets()
self.setup()

# timers
self.bee_timer = Timer(50, func = self.create_bee, autostart = True, repeat = True) # die 100 zu 50 wenn die bees schneller spawnen sollen

def create_bee(self):
spawn_x = randint(0, self.level_width - 50) # anywhere in map width
spawn_y = randint(50, self.level_height - 50) # anywhere in map height
Bee(
frames=self.bee_frames,
pos=(spawn_x, spawn_y),
groups=(self.all_sprites, self.enemy_sprites),
speed=randint(1,1)
)

def create_bullet(self, pos, direction):
x = pos[0] + direction * 34 if direction == 1 else pos[0] + direction * 34 - self.bullet_surf.get_width()
Bullet(self.bullet_surf, (x, pos[1]), direction, (self.all_sprites, self.bullet_sprites))
Fire(self.fire_surf, pos, self.all_sprites, self.player)
self.audio['shoot'].play()

def load_assets(self):
# graphics
self.player_frames = import_folder('images', 'player')
self.bullet_surf = import_image('images', 'gun', 'bullet')
self.fire_surf = import_image('images', 'gun', 'fire')
self.bee_frames = import_folder('images', 'enemies', 'bee')
self.worm_frames = import_folder('images', 'enemies', 'worm')

# sounds
self.audio = audio_importer('audio')

def setup(self):
tmx_map = load_pygame(join('data', 'maps', 'world.tmx'))
self.level_width = tmx_map.width * TILE_SIZE
self.level_height = tmx_map.height * TILE_SIZE

for x, y, image in tmx_map.get_layer_by_name('Main').tiles():
Sprite((x * TILE_SIZE,y * TILE_SIZE), image, (self.all_sprites, self.collision_sprites))

for x, y, image in tmx_map.get_layer_by_name('Decoration').tiles():
Sprite((x * TILE_SIZE,y * TILE_SIZE), image, self.all_sprites)

for obj in tmx_map.get_layer_by_name('Entities'):
if obj.name == 'Player':
self.player = Player((obj.x, obj.y), self.all_sprites, self.collision_sprites, self.player_frames, self.create_bullet)

if obj.name == 'Worm':
Worm(self.worm_frames, pygame.Rect(obj.x, obj.y, obj.width, obj.height), (self.all_sprites, self.enemy_sprites))
print("Worm created at:", obj.x, obj.y)
print(len(self.worm_frames))

#self.audio['music'].play(loops = -1)

def collision(self):
# bullets -> enemies
for bullet in self.bullet_sprites.sprites():
sprite_collision = pygame.sprite.spritecollide(bullet, self.enemy_sprites, False, pygame.sprite.collide_mask)
if sprite_collision:
self.audio['impact'].play()
bullet.kill()
for sprite in sprite_collision:
sprite.destroy()

# enemies -> player
if pygame.sprite.spritecollide(self.player, self.enemy_sprites, False, pygame.sprite.collide_mask):
self.running = False

def run(self):
while self.running:
dt = self.clock.tick(FRAMERATE) / 1000

for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False

# update
self.bee_timer.update()
self.all_sprites.update(dt)
self.collision()

# draw
self.display_surface.fill(BG_COLOR)
self.all_sprites.draw(self.player.rect.center)

pygame.display.update()

pygame.quit()

if __name__ == '__main__':
game = Game()
game.run()



from settings import *
from timer import Timer
from math import sin
from random import randint

class Sprite(pygame.sprite.Sprite):
def __init__(self, pos, surf, groups):
super().__init__(groups)
self.image = surf
self.rect = self.image.get_rect(topleft = pos)

class Bullet(Sprite):
def __init__(self, surf, pos, direction, groups):
super().__init__(pos, surf, groups)

# adjustment
self.image = pygame.transform.flip(self.image, direction == -1, False)

# movement
self.direction = direction
self.speed = 850

def update(self, dt):
self.rect.x += self.direction * self.speed * dt

class Fire(Sprite):
def __init__(self, surf, pos, groups, player):
super().__init__(pos, surf, groups)
self.player = player
self.flip = player.flip
self.timer = Timer(100, autostart = True, func = self.kill)
self.y_offset = pygame.Vector2(0, 8)
if self.player.flip:
self.rect.midright = self.player.rect.midleft + self.y_offset
self.image = pygame.transform.flip(self.image, True, False)
else:
self.rect.midleft = self.player.rect.midright + self.y_offset

def update(self, _):
self.timer.update()

if self.player.flip:
self.rect.midright = self.player.rect.midleft + self.y_offset
else:
self.rect.midleft = self.player.rect.midright + self.y_offset

if self.flip != self.player.flip:
self.kill()

class AnimatedSprite(Sprite):
def __init__(self, frames, pos, groups):
self.frames, self.frame_index, self.animation_speed = frames, 0, 10
super().__init__(pos, self.frames[self.frame_index], groups)

def animate(self, dt):
self.frame_index += self.animation_speed * dt
self.image = self.frames[int(self.frame_index) % len(self.frames)]

class Enemy(AnimatedSprite):
def __init__(self, frames, pos, groups):
super().__init__(frames, pos, groups)
self.death_timer = Timer(200, func = self.kill)

def destroy(self):
self.death_timer.activate()
self.animation_speed = 0
self.image = pygame.mask.from_surface(self.image).to_surface()
self.image.set_colorkey('black')

def update(self, dt):
self.death_timer.update()
if not self.death_timer:
self.move(dt)
self.animate(dt)
self.constraint()

class Bee(Enemy):
def __init__(self, frames, pos, groups, speed):
super().__init__(frames, pos, groups)
self.speed = speed
self.amplitude = randint(500, 600)
self.frequency = randint(300, 600)

def move(self, dt):
self.rect.x -= self.speed * dt
self.rect.y += sin(pygame.time.get_ticks() / self.frequency) * self.amplitude * dt

def constraint(self):
if self.rect.right 0: self.rect.right = sprite.rect.left
if self.direction.x < 0: self.rect.left = sprite.rect.right
if direction == 'vertical':
if self.direction.y > 0: self.rect.bottom = sprite.rect.top
if self.direction.y < 0: self.rect.top = sprite.rect.bottom
self.direction.y = 0

def check_floor(self):
bottom_rect = pygame.Rect(0, 0, self.rect.width, 2)
bottom_rect.midtop = self.rect.midbottom

self.on_floor = (bottom_rect.collidelist([sprite.rect for sprite in self.collision_sprites]) >= 0)

def animate(self, dt):
if self.direction.x:
self.frame_index += self.animation_speed * dt
self.flip = self.direction.x < 0
else:
self.frame_index = 0

self.frame_index = 1 if not self.on_floor else self.frame_index
self.image = self.frames[int(self.frame_index) % len(self.frames)]
self.image = pygame.transform.flip(self.image, self.flip, False)

def update(self, dt):
self.shoot_timer.update()
self.check_floor()
self.input()
self.move(dt)
self.animate(dt)


Подробнее здесь: https://stackoverflow.com/questions/798 ... ygame-game
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»