鱼C论坛

 找回密码
 立即注册
查看: 1832|回复: 2

Python pygame动画精灵问题

[复制链接]
发表于 2020-7-30 09:40:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在小甲鱼pygame动画精灵那一章,我跟着小甲鱼写代码,但是写完后运行起来十分卡顿,请问这是为什么呢?
代码如下
import pygame
import sys
from pygame.locals import *
from random import *

class Ball(pygame.sprite.Sprite):
    
    def __init__(self,image,position,speed,bg_size):
        pygame.sprite.Sprite.__init__(self)
        
        self.image = pygame.image.load(image).convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.left,self.rect.top = position
        self.speed = speed
        self.width,self.height = bg_size[0],bg_size[1]

    def move(self):
        self.rect = self.rect.move(self.speed)

        if self.rect.right < 0:
            self.rect.left = self.width
            
        if self.rect.left > self.width:
            self.rect.right = 0

        if self.rect.bottom < 0:
            self.rect.top = self.height
            
        if self.rect.top > self.height:
            self.rect.bottom = 0

        


def main():
    pygame.init()

    ball_image = 'W020130917263500532559.png'#素材
    bg_image = '780 (1).png'#素材

    running = True

    bg_size = width,height = 780,520#1024,681
    screen = pygame.display.set_mode(bg_size)
    pygame.display.set_caption('玩球')

    background = pygame.image.load(bg_image).convert_alpha()

    balls = []

    for i in range(5):
        position = randint(0,width-100),randint(0,height-100)
        speed = [randint(-10,10),randint(-10,10)]
        ball = Ball(ball_image,position,speed,bg_size)
        balls.append(ball)

    clock = pygame.time.Clock()
    
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()

            screen.blit(background,(0,0))
            for each in balls:
                each.move()
                screen.blit(each.image,each.rect)

            pygame.display.flip()
            clock.tick(10)
            

if __name__ == "__main__":
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-30 09:42:35 | 显示全部楼层
把 FPS 调大一点试试:
import pygame
import sys
from pygame.locals import *
from random import *

class Ball(pygame.sprite.Sprite):
    
    def __init__(self,image,position,speed,bg_size):
        pygame.sprite.Sprite.__init__(self)
        
        self.image = pygame.image.load(image).convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.left,self.rect.top = position
        self.speed = speed
        self.width,self.height = bg_size[0],bg_size[1]

    def move(self):
        self.rect = self.rect.move(self.speed)

        if self.rect.right < 0:
            self.rect.left = self.width
            
        if self.rect.left > self.width:
            self.rect.right = 0

        if self.rect.bottom < 0:
            self.rect.top = self.height
            
        if self.rect.top > self.height:
            self.rect.bottom = 0

        


def main():
    pygame.init()

    ball_image = 'W020130917263500532559.png'#素材
    bg_image = '780 (1).png'#素材

    running = True

    bg_size = width,height = 780,520#1024,681
    screen = pygame.display.set_mode(bg_size)
    pygame.display.set_caption('玩球')

    background = pygame.image.load(bg_image).convert_alpha()

    balls = []

    for i in range(5):
        position = randint(0,width-100),randint(0,height-100)
        speed = [randint(-10,10),randint(-10,10)]
        ball = Ball(ball_image,position,speed,bg_size)
        balls.append(ball)

    clock = pygame.time.Clock()
    
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()

            screen.blit(background,(0,0))
            for each in balls:
                each.move()
                screen.blit(each.image,each.rect)

            pygame.display.flip()
            clock.tick(60)
            

if __name__ == "__main__":
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-30 09:46:44 | 显示全部楼层
我懂了,是缩进的问题,我把
screen.blit(background,(0,0))
        for each in balls:
            each.move()
            screen.blit(each.image,each.rect)

        pygame.display.flip()
        clock.tick(10)
这段代码放进了
for event in pygame.event.get():
里,造成了卡顿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 11:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表