我是python/pygame的初学者,这里是新的页面。我有以下问题: 我的玩家等级达到敌人等级的探测半径! 每2秒向玩家射击一次,但不是一颗子弹,而是一次两颗,或者偏移0.1秒! 但我只想要一颗子弹而不是两颗! 我从创建者那里得到的代码:Kidscancode(https://www.youtube.com/channel/UCNaPQ5uLX5iIEHUCLmfAgKg)! 不幸的是,他没有回复我一个月前发的邮件! 你能看看我的密码告诉我哪里出错了吗? (来自德国,有翻译)
敌人克拉斯:
import pygame as pg
from settings import *
from sprites import *
from random import randint, uniform
vec = pg.math.Vector2
class Mob(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites, game.mobs
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.image = pg.Surface((140, 20))
self.image.fill(RED)
self.rect = self.image.get_rect()
self.rect.center = (WIDTH / 2, HEIGHT / 2)
self.pos = vec(x, y) * TILESIZE
self.rect.x = x * TILESIZE
self.rect.y = y * TILESIZE
self.rotate_time = pg.time.get_ticks()
self.target = game.player
self.health = MOB_HEALTH
self.last_shot = 0
def shoot(self):
Mob_bullet(self.game)
def rotate(self,angle):
now = pg.time.get_ticks()
if now - self.rotate_time > 50:
self.rotate_time = pg.time.get_ticks()
newimage = pg.transform.rotate(self.image, angle)
oldcenter = self.rect.center
self.image = newimage
self.rect = self.image.get_rect()
self.rect.center = oldcenter
def update(self):
target_dist = self.target.pos - self.pos
if target_dist.length_squared() < DETECT_RADIUS ** 2:
now = pg.time.get_ticks()
if now - self.last_shot > MOB_BULLET_RATE:
self.last_shot = now
self.shoot()
class Mob_bullet(pg.sprite.Sprite):
def __init__(self, game):
self.groups = game.all_sprites
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.image = pg.Surface((10, 10))
self.image.fill(ORANGE)
self.rect = self.image.get_rect()
self.pos = vec(800, 400)
self.vel = vec(MAX_SPEED, 0).rotate(uniform(0, 180))
self.acc = vec(0, 0)
self.rect.center = self.pos
"'spawntime ist wichtig für Lifetime der Bullets!'"
self.spawn_time = pg.time.get_ticks()
def seek(self, target):
self.desired = (target - self.pos).normalize() * MAX_SPEED
steer = (self.desired - self.vel)
if steer.length() > SEEK_FORCE:
steer.scale_to_length(SEEK_FORCE)
return steer
def update(self):
"'Geschwindigkeit = suche nach(Target)'"
self.acc = self.seek(self.game.player.pos)
"'Bewegungsgleichung'"
self.vel += self.acc
if self.vel.length() > MAX_SPEED:
self.vel.scale_to_length(MAX_SPEED)
self.pos += self.vel
self.rect.center = self.pos
"'Kollission mit Walls'"
if pg.sprite.spritecollideany(self, self.game.walls):
self.kill()
"'Lebenszeit von Bullets'"
if pg.time.get_ticks() - self.spawn_time > MOB_BULLET_LIFETIME:
self.kill()
主文件的一部分:
class Game:
def new(self):
self.all_sprites = pg.sprite.Group()
.......
self.Mob_bullets = pg.sprite.Group()
设置文件的一部分:
"'Bullet-Settings'"
MOB_BULLET_LIFETIME = 5000
MOB_BULLET_RATE = 2000
MOB_BULLET_DMG = 20
MAX_SPEED = 5
SEEK_FORCE = 3
我无法传递错误消息,因为游戏正常。 我学习python(我的第一种编程语言)才3个月。请不要使用太多的技术术语;)!你知道吗
还有一件事,这不是一个显示错误,有2个子弹(矩形)出来,这是计数!你知道吗
我建议在触发事件时将信息打印到控制台。如果你每次发射子弹时都打印环境变量,那可能会给你一些线索。当满足某些条件时,您还可以打印“玩家在范围内”之类的消息。您可能会看到一个与您尝试的模式不匹配的模式,这将缩小代码中有错误的部分。你知道吗
发现一个错误。文件中有打字错误地图.txt文件。 而不是一个敌人,我有两个相邻!所以代码是好的!你知道吗
相关问题 更多 >
编程相关推荐