[英]While converting json to tsv( “\t” is my delimineter) there are new line character in values, How do i get rid of them
[英]How do I get my character to move while also getting bullets to spawn above them?
我一直在嘗試在 Python 中制作子彈地獄(dankamu)游戲,當我嘗試用子彈動畫角色的動作時,我遇到了一些問題。 根據我將redrawGameWindow()
function 放在哪里,子彈無法生成或我的游戲角色根本無法移動。 我認為這可能是因為我的運動 function 與我用於子彈的 for 循環是分開的? 如果是這種情況,我不知道如何將它們合並在一起以便同時運行。
class mc(object):
def __init__(self, x, y, width, height):
self.x = x
self.y = y
self.width = width
self.height = height
self.vel = 5
self.hitbox = (self.x, self.y, 30, 30)
def draw(self, win):
win.blit(char, (self.x, self.y))
self.hitbox = (self.x, self.y, 30, 30)
pygame.draw.rect(win, (255,0,0), self.hitbox,2)
def hit(self):
print("Hit")
def redrawGameWindow(mainchar, bullet, bullets):
win.blit(bg, (0,0))
mainchar.draw(win)
pygame.display.update()
for bullet in bullets:
bullet.draw(win)
class projectile(object):
def __init__(self,x,y,radius,color,facing):
self.x = x
self.y = y
self.radius = radius
self.color = color
self.facing = facing
self.vel = 8 * facing
def draw(self,win):
pygame.draw.circle(win, self.color, (self.x,self.y), self.radius)
def dankamu(enemy):
mainchar = mc(200, 410, 64, 64)
run = True
bullets = []
while run:
pygame.time.delay(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and mainchar.x > 0:
mainchar.x -= mainchar.vel
if keys[pygame.K_RIGHT] and mainchar.x < 470:
mainchar.x += mainchar.vel
if keys[pygame.K_DOWN] and mainchar.y < 470:
mainchar.y += mainchar.vel
if keys[pygame.K_UP] and mainchar.y > 0:
mainchar.y -= mainchar.vel
if keys[pygame.K_LSHIFT] and mainchar.vel > 0:
mainchar.vel = 3
if keys[pygame.K_RSHIFT]:
mainchar.vel = 5
win.fill((255, 255, 255))
if enemy == "skeleton":
for i in range (30):
bullets.append(projectile(250, 250, 6, (0, 0, 0), 1))
for bullet in bullets:
if bullet.y - bullet.radius < mainchar.hitbox[1] + mainchar.hitbox[3] and bullet.y + bullet.radius > mainchar.hitbox[1]:
if bullet.x + bullet.radius > mainchar.hitbox[0] and bullet.x - bullet.radius < mainchar.hitbox[0] + mainchar.hitbox[2]:
mainchar.hit()
bullets.pop(bullets.index(bullet))
elif bullet.x < 500 and bullet.x > 0:
bullet.x += bullet.vel
else:
bullets.pop(bullets.index(bullet))
redrawGameWindow(mainchar, bullet, bullets)
run = False
pygame.quit()
#Actual Running
dankamu("skeleton")
print("Dankamu success")
當你生成子彈時,你必須在玩家的位置上方生成子彈:
bullets.append(projectile(250, 250, 6, (0, 0, 0), 1))
bullets.append(projectile(mainchar.x, 0, 6, (0, 0, 0), 1))
由於子彈必須從底部移動到頂部,因此您必須增加子彈的 y 坐標:
bullet.x += bullet.vel
bullet.y += bullet.vel
在更新顯示之前繪制項目符號:
def redrawGameWindow(mainchar, bullet, bullets):
win.blit(bg, (0,0))
mainchar.draw(win)
for bullet in bullets:
bullet.draw(win)
pygame.display.update()
不要一次添加所有項目符號:
if bullet_frame_count == 0:
bullet_frame_count = 10
if len(bullets) < 30:
bullets.append(projectile(mainchar.x, 0, 6, (0, 0, 0), 1))
else:
bullet_frame_count -= 1
使用pygame.Rect.colliderect
進行碰撞測試:
bullet_rect = pygame.Rect(bullet.x-bullet.radius, bullet.y-bullet.radius, bullet.radius*2,bullet.radius*2)
if bullet_rect.colliderect(mainchar.hitbox):
mainchar.hit()
bullets.pop(bullets.index(bullet))
完整dankamu
function:
def dankamu(enemy):
mainchar = mc(200, 410, 64, 64)
run = True
bullets = []
count = 0
while run:
pygame.time.delay(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
mainchar.x = mainchar.x + (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * mainchar.vel
mainchar.y = mainchar.y + (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * mainchar.vel
mainchar.x = max(0, min(470, mainchar.x))
mainchar.y = max(0, min(470, mainchar.y))
if keys[pygame.K_LSHIFT] and mainchar.vel > 0:
mainchar.vel = 3
if keys[pygame.K_RSHIFT]:
mainchar.vel = 5
if enemy == "skeleton":
if count == 0:
count = 10
if len(bullets) < 30:
bullets.append(projectile(mainchar.x, 0, 6, (0, 0, 0), 1))
else:
count -= 1
for bullet in bullets[:]:
bullet_rect = pygame.Rect(bullet.x-bullet.radius, bullet.y-bullet.radius, bullet.radius*2,bullet.radius*2)
if bullet_rect.colliderect(mainchar.hitbox):
mainchar.hit()
bullets.pop(bullets.index(bullet))
elif bullet.y < 500:
bullet.y += bullet.vel
else:
bullets.pop(bullets.index(bullet))
redrawGameWindow(mainchar, bullet, bullets)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.