我是pygame新手,刚学会了什么是类
我想让玩家发射子弹,但子弹没有画在屏幕上。在
有4个python文件
所以我的想法是先加载图像并为每个子弹做表面处理, 第二次更新位置,然后在曲面上绘制图像。如果子弹在目的地附近,删除它。 每次我按空格键调用shoot函数时,这个警告就会出现“libpng warning:iCCP:known incorrect sRGB profile”。我相信我可以忽略不管怎样,这个我不知道为什么子弹图像没有出现。 有人能帮我吗?谢谢。欢迎任何建议!在
游戏.py
import pygame as pyg
from pygame.locals import *
import sys
import player
import background, ect
#Screen size
s_width = 1280
s_height = 720
screen_size = (s_width,s_height)
#Player
p_speed = 5
#Initialization
pyg.init()
screen = pyg.display.set_mode(screen_size)
pyg.display.set_caption("Shoot")
#Set background
Background = background.Background("forest2.jpeg",(0,0))
#Set Player
Player= player.Player("Crab.png",100,100,640,360)
#Input
keys = {"right":False , "left":False , "up":False , "down":False , "bullet":False }
bullets = []
#Main Loop
running = True
while running:
#Get inputs
for event in pyg.event.get():
if event.type == QUIT:
pyg.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_LEFT:
keys['left'] = True
elif event.key == K_RIGHT:
keys['right'] = True
elif event.key == K_UP:
keys['up'] = True
elif event.key == K_DOWN:
keys['down'] = True
elif event.key == K_SPACE:
keys['bullet'] = True
elif event.key == K_q:
pyg.quit()
sys.exit()
elif event.type == KEYUP:
if event.key == K_LEFT:
keys['left'] = False
elif event.key == K_RIGHT:
keys['right'] = False
elif event.key == K_UP:
keys['up'] = False
elif event.key == K_DOWN:
keys['down'] = False
elif event.key == K_SPACE:
keys['bullet'] = False
#Get time
Player.clock.tick(60)
dt = Player.clock.get_time()
dt *= 0.001
#Update values
if keys['right']:
Player.x += p_speed
if keys['left']:
Player.x -= p_speed
if (keys['up'] and Player.on_ground):
Player.jump()
if keys['bullet']:
Player.shoot(bullets)
if Player.on_ground == False: #Gravity
Player.give_force(0,-750)
Player.update_pos(dt)
if Player.y >= 500:
Player.y = 500
Player.y_vel = 0
Player.y_accel = 0
Player.on_ground = True
for bullet in bullets:
bullet.update(dt)
if (bullet.desx - bullet.x)<0.3:
del bullet
#Draw
screen.fill([255,255,255])
screen.blit(Background.image,Background.rect)
screen.blit(Player.player_sprite,(Player.x,Player.y))
for bullet in bullets:
bullet.draw_bullet()
#Update game state
pyg.display.flip()
pyg.display.update()
播放器.py
^{pr2}$ect.py公司
#Imports
import random, math, pygame as pyg
from pygame.locals import *
class Bullet(pyg.sprite.Sprite):
"""
This class represents bullets
"""
def __init__(self,x,y,desx, desy):
pyg.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.desx = desx
self.desy = desy
h = math.sqrt(math.pow(desx-x,2) + math.pow(desy-y,2))
self.speed = 1 + random.randrange(-1,1)
self.speedx = self.speed*math.acos((desx - x)/h)
self.speedy = self.speed*math.asin((desy - y)/h)
self.surface = pyg.Surface((128,128))
self.image = pyg.image.load("bullet.png")
self.image = pyg.transform.scale(self.image, (128, 128))
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = x + 64, y -64
def update(self,dt):
self.x += (self.speedx*dt)
self.y -= (self.speedy*dt)
def draw_bullet(self):
self.surface.blit(self.image,(self.x -64,self.y + 64))
您只需将项目符号的
self.image
blit到self.surface
上,而不是屏幕表面。将screen
传递给draw_bullet
方法,然后将self.image
blit到它上面。在相关问题 更多 >
编程相关推荐