pygame 和 sprite 模糊运动
pygame and sprite blur movement
我正在努力正确地移动精灵。我看到模糊移动而不是平滑移动,我不知道如何解决它。
你有没有机会指出我做错了什么?
我的目标是让比萨掉落,这样它会撞到底部然后反弹,如果它撞到顶部又反弹回来,然后再跌到底部 -> 弹跳 -> 顶部 -> 弹跳等
import pygame
gravity = 0.5
class PizzaSprite:
def __init__(self, image, spritepos):
self.image = image
self.spos = spritepos
(x, y) = spritepos
self.posx = x
self.posy = y
self.xvel = 1
self.yvel = 1
print "x ", x
print "y ", y
def draw(self, target_surface):
target_surface.blit(self.image, self.spos)
def update(self):
self.posy -= self.yvel
self.spos = (self.posx, self.posy)
return
def main():
pygame.init()
screen_width = 800
screen_height = 600
x = screen_width
y = screen_height
screen = pygame.display.set_mode((screen_width, screen_height))
wall_image = pygame.image.load("wall.png")
sky_image = pygame.image.load("sky.png")
pizza_image = pygame.image.load("pizza.png")
screen.blit(wall_image,(0,200))
screen.blit(sky_image,(0,0))
all_sprites = []
pizza1 = PizzaSprite(pizza_image, (x/2, y/2))
all_sprites.append(pizza1)
while True:
ev = pygame.event.poll()
if ev.type == pygame.QUIT:
break
for sprite in all_sprites:
sprite.update()
for sprite in all_sprites:
sprite.draw(screen)
pygame.display.flip()
pygame.quit()
main()
在主游戏开始时循环添加
白色 = (255,255,255)
screen.fill(白色)
让我给你打个比方,现在正在发生的事情,
你有纸和很多披萨贴纸,打算制作一本翻页书。为了在每张纸上产生运动的错觉,你把贴纸贴得稍微低一点。 screen.fill 命令本质上是用您给它的 rgb 颜色值清除屏幕。当您基本上没有填满屏幕时,您正在做的就是尝试在一张纸上制作那本动画书。当你想要的是每页一个时,你只是不断地把越来越多的贴纸放得更低一点,造成模糊。
并放置
pygame.init()
screen_width = 800
screen_height = 600
x = screen_width
y = screen_height
screen = pygame.display.set_mode((screen_width, screen_height))
wall_image = pygame.image.load("wall.png")
sky_image = pygame.image.load("sky.png")
所有在你的主游戏循环之外假设你不会在你的程序中改变这些变量,如果他们不重新定义屏幕,x,y 和你的两个图像一遍又一遍是乏味和低效的变化。
总结一下:
使用screen.fill(白色)命令重置屏幕颜色
如果 png 永远不会改变并且在主循环中不需要它们,您只需要导入 png 并定义一次变量
希望这有助于解决问题。
我正在努力正确地移动精灵。我看到模糊移动而不是平滑移动,我不知道如何解决它。 你有没有机会指出我做错了什么?
我的目标是让比萨掉落,这样它会撞到底部然后反弹,如果它撞到顶部又反弹回来,然后再跌到底部 -> 弹跳 -> 顶部 -> 弹跳等
import pygame
gravity = 0.5
class PizzaSprite:
def __init__(self, image, spritepos):
self.image = image
self.spos = spritepos
(x, y) = spritepos
self.posx = x
self.posy = y
self.xvel = 1
self.yvel = 1
print "x ", x
print "y ", y
def draw(self, target_surface):
target_surface.blit(self.image, self.spos)
def update(self):
self.posy -= self.yvel
self.spos = (self.posx, self.posy)
return
def main():
pygame.init()
screen_width = 800
screen_height = 600
x = screen_width
y = screen_height
screen = pygame.display.set_mode((screen_width, screen_height))
wall_image = pygame.image.load("wall.png")
sky_image = pygame.image.load("sky.png")
pizza_image = pygame.image.load("pizza.png")
screen.blit(wall_image,(0,200))
screen.blit(sky_image,(0,0))
all_sprites = []
pizza1 = PizzaSprite(pizza_image, (x/2, y/2))
all_sprites.append(pizza1)
while True:
ev = pygame.event.poll()
if ev.type == pygame.QUIT:
break
for sprite in all_sprites:
sprite.update()
for sprite in all_sprites:
sprite.draw(screen)
pygame.display.flip()
pygame.quit()
main()
在主游戏开始时循环添加 白色 = (255,255,255) screen.fill(白色) 让我给你打个比方,现在正在发生的事情,
你有纸和很多披萨贴纸,打算制作一本翻页书。为了在每张纸上产生运动的错觉,你把贴纸贴得稍微低一点。 screen.fill 命令本质上是用您给它的 rgb 颜色值清除屏幕。当您基本上没有填满屏幕时,您正在做的就是尝试在一张纸上制作那本动画书。当你想要的是每页一个时,你只是不断地把越来越多的贴纸放得更低一点,造成模糊。
并放置
pygame.init()
screen_width = 800
screen_height = 600
x = screen_width
y = screen_height
screen = pygame.display.set_mode((screen_width, screen_height))
wall_image = pygame.image.load("wall.png")
sky_image = pygame.image.load("sky.png")
所有在你的主游戏循环之外假设你不会在你的程序中改变这些变量,如果他们不重新定义屏幕,x,y 和你的两个图像一遍又一遍是乏味和低效的变化。
总结一下:
使用screen.fill(白色)命令重置屏幕颜色
如果 png 永远不会改变并且在主循环中不需要它们,您只需要导入 png 并定义一次变量
希望这有助于解决问题。