Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使精灵平稳旋转_Python_Pygame_Sprite - Fatal编程技术网

Python 如何使精灵平稳旋转

Python 如何使精灵平稳旋转,python,pygame,sprite,Python,Pygame,Sprite,我需要帮助使我的精灵平稳旋转 现在我必须多次按下按钮来旋转精灵。 当我旋转精灵时,它也会以一种奇怪的方式扭曲精灵 如果您转到主循环,您可以看到我现在是如何在代码中实现旋转的。 我是编程新手,如果有人能帮我,我将不胜感激 import pygame as pg import sys x, y = 0, 0 class Rocket(pg.sprite.Sprite): def __init__(self, picture_path, x, y):

我需要帮助使我的精灵平稳旋转

现在我必须多次按下按钮来旋转精灵。 当我旋转精灵时,它也会以一种奇怪的方式扭曲精灵

如果您转到主循环,您可以看到我现在是如何在代码中实现旋转的。 我是编程新手,如果有人能帮我,我将不胜感激

import pygame as pg
    import sys
    x, y = 0, 0
    class Rocket(pg.sprite.Sprite):
        def __init__(self, picture_path, x, y):
            super().__init__()
            self.image = pg.image.load(picture_path)
            self.image = pg.transform.scale(self.image, (120, 100))
            self.angle_change = 0
            self.angle = 90 + self.angle_change
            self.image = pg.transform.rotate(self.image, self.angle)
            self.rect = self.image.get_rect()
            self.rect.x = 900
            self.rect.y = 400
            self.pressed_w = False
            self.pressed_a = False
            self.pressed_s = False
            self.pressed_d = False
            self.speed = 3
            self.gravity = False
        def update(self):
            if self.pressed_a:
                self.rect.x -= self.speed
            if self.pressed_d:
                self.rect.x += self.speed
            if self.pressed_w:
                self.rect.y -= self.speed
            if self.pressed_s:
                self.angle_change += 3
            if self.gravity:
                self.rect.y += self.speed
            if self.rect.left < 0: self.rect.left = 0
            if self.rect.right > width: self.rect.right = width
            if self.rect.top < 0: self.rect.top = 0
            if self.rect.bottom > height: self.rect.bottom = height
    class Rocket1(pg.sprite.Sprite):
        def __init__(self, picture_path, x, y):
            super().__init__()
            self.image = pg.image.load(picture_path)
            self.image = pg.transform.scale(self.image, (120, 100))
            self.rotate = 90
            self.image = pg.transform.rotate(self.image, self.rotate)
            self.rect = self.image.get_rect()
            self.rect.x = 900
            self.rect.y = 400
            self.pressed_up = False
            self.pressed_left = False
            self.pressed_down = False
            self.pressed_right = False
            self.speed = 3
            self.gravity = False
        def update(self):
            if self.pressed_left:
                self.rect.x -= self.speed
            if self.pressed_right:
                self.rect.x += self.speed
            if self.pressed_up:
                self.rect.y -= self.speed
            if self.pressed_down:
                self.rect.y += self.speed
            if self.gravity:
                self.rect.y += self.speed
            if self.rect.left < 0: self.rect.left = 0
            if self.rect.right > width: self.rect.right = width
            if self.rect.top < 0: self.rect.top = 0
            if self.rect.bottom > height: self.rect.bottom = height
    pg.init()
    clock = pg.time.Clock()
    width = 1920
    height = 1080
    screen = pg.display.set_mode((width, height))
    background = pg.image.load("bg.jpg")
    #rocket
    player_rect = Rocket("rocket.png", x, y)
    player_rect1 = Rocket1("rocketflames.png", x, y)
    rocket_group = pg.sprite.Group()
    rocket_group.add(player_rect,player_rect1)
    while True:
        rocket_rotate = 0
        for event in pg.event.get():
            if event.type == pg.QUIT:
                pg.quit()
                sys.exit()
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_w:
                    player_rect.pressed_w = True
                    player_rect.gravity = False
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_s:
                    rocket_rotate += 1
                    for rocket in rocket_group:
                        rocket.image = pg.transform.rotate(rocket.image, rocket_rotate)
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_d:
                    player_rect.pressed_d = True
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_a:
                    player_rect.pressed_a = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_w:
                    player_rect.pressed_w = False
                    player_rect.gravity = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_s:
                    rocket_rotate += 0
                    for rocket in rocket_group:
                        rocket.image = pg.transform.rotate(rocket.image, rocket_rotate)
            if event.type == pg.KEYUP:
                if event.key == pg.K_d:
                    player_rect.pressed_d = False
                    player_rect.gravity = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_a:
                    player_rect.pressed_a = False
                    player_rect.gravity = True
            ###
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_UP:
                    player_rect1.pressed_up = True
                    player_rect1.gravity = False
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_DOWN:
                    player_rect1.pressed_down = True
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_RIGHT:
                    player_rect1.pressed_right = True
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_LEFT:
                    player_rect1.pressed_left = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_UP:
                    player_rect1.pressed_up = False
                    player_rect1.gravity = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_DOWN:
                    player_rect1.pressed_down = False
                    player_rect1.gravity = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_RIGHT:
                    player_rect1.pressed_right = False
                    player_rect1.gravity = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_LEFT:
                    player_rect1.pressed_left = False
                    player_rect1.gravity = True
        pg.display.flip()
        screen.blit(background, (0, 0))
        rocket_group.draw(screen)
        rocket_group.update()
        clock.tick(120)
将pygame导入为pg
导入系统
x、 y=0,0
火箭级(精灵级):
定义初始化(自,图片路径,x,y):
super()。\uuuu init\uuuuu()
self.image=pg.image.load(图片路径)
self.image=pg.transform.scale(self.image,(120100))
自转角变化=0
自转角=90+自转角变化
self.image=pg.transform.rotate(self.image,self.angle)
self.rect=self.image.get_rect()
自校正x=900
自校正y=400
self.pressed_w=False
self.pressed_a=错误
self.pressed\u s=错误
self.pressed\u d=False
自身速度=3
self.gravity=False
def更新(自我):
如果按下self.u\a:
self.rect.x-=自速度
如果按下self.u\d:
self.rect.x+=自速度
如果按下self.u w:
自校正y-=自校正速度
如果按下self.u\s:
自转角变化+=3
如果自重:
自校正y+=自校正速度
如果self.rect.left<0:self.rect.left=0
如果self.rect.right>宽度:self.rect.right=宽度
如果self.rect.top<0:self.rect.top=0
如果self.rect.bottom>高度:self.rect.bottom=高度
1级火箭(第1页雪碧、雪碧):
定义初始化(自,图片路径,x,y):
super()。\uuuu init\uuuuu()
self.image=pg.image.load(图片路径)
self.image=pg.transform.scale(self.image,(120100))
自转=90
self.image=pg.transform.rotate(self.image,self.rotate)
self.rect=self.image.get_rect()
自校正x=900
自校正y=400
self.pressed\u up=False
self.pressed_left=False
self.pressed_down=错误
self.pressed\u right=False
自身速度=3
self.gravity=False
def更新(自我):
如果按下self.u左键:
self.rect.x-=自速度
如果按下self.u右键:
self.rect.x+=自速度
如果按下self.u,则:
自校正y-=自校正速度
如果按下self.u:
自校正y+=自校正速度
如果自重:
自校正y+=自校正速度
如果self.rect.left<0:self.rect.left=0
如果self.rect.right>宽度:self.rect.right=宽度
如果self.rect.top<0:self.rect.top=0
如果self.rect.bottom>高度:self.rect.bottom=高度
第init页()
时钟=pg.time.clock()
宽度=1920
高度=1080
屏幕=pg.display.set_模式((宽度、高度))
背景=pg.image.load(“bg.jpg”)
#火箭
player_rect=Rocket(“Rocket.png”,x,y)
player_rect1=Rocket1(“rocketflames.png”,x,y)
rocket_group=pg.sprite.group()
火箭组。添加(玩家组,玩家组1)
尽管如此:
火箭旋转=0
对于pg.event.get()中的事件:
如果event.type==pg.QUIT:
第页退出
sys.exit()
如果event.type==pg.KEYDOWN:
如果event.key==pg.K_w:
player_rect.pressed_w=True
player_rect.gravity=False
如果event.type==pg.KEYDOWN:
如果event.key==pg.K_s:
火箭旋转+=1
对于rocket_组中的rocket:
rocket.image=pg.transform.rotate(rocket.image,rocket\u rotate)
如果event.type==pg.KEYDOWN:
如果event.key==pg.K\u d:
player\u rect.pressed\u d=True
如果event.type==pg.KEYDOWN:
如果event.key==pg.K_a:
player_rect.pressed_a=True
如果event.type==pg.KEYUP:
如果event.key==pg.K_w:
player_rect.pressed_w=False
player_rect.gravity=真
如果event.type==pg.KEYUP:
如果event.key==pg.K_s:
火箭旋转+=0
对于rocket_组中的rocket:
rocket.image=pg.transform.rotate(rocket.image,rocket\u rotate)
如果event.type==pg.KEYUP:
如果event.key==pg.K\u d:
player_rect.pressed_d=False
player_rect.gravity=真
如果event.type==pg.KEYUP:
如果event.key==pg.K_a:
player_rect.pressed_a=False
player_rect.gravity=真
###
如果event.type==pg.KEYDOWN:
如果event.key==pg.K_UP:
player_rect1.pressed_up=True
player_rect1.gravity=False
如果event.type==pg.KEYDOWN:
如果event.key==pg.K_向下:
player_rect1.pressed_down=True
如果event.type==pg.KEYDOWN:
如果event.key==pg.K_RIGHT:
player_rect1.pressed_right=True
如果event.type==pg.KEYDOWN:
如果event.key==pg.K_左:
player_rect1.pressed_left=True
如果event.type==pg.KEYUP:
如果event.key==pg.K_UP:
player_rect1.pressed_up=False
player_rect1.gravity=True
如果event.type==pg.KEYUP:
如果event.key==pg.K_向下:
运动员