pygame.ransform.rotate

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

so ich hab das ganze mal animiert und in eine klasse gepackt
der Panzer springt noch etwas beim 90grad übergang

oder eine bessere idee
image
Panz.png Panza
BildBild

Code: Alles auswählen

import sys, os
import pygame
from pygame.locals import *

SCREENRECT = Rect(0, 0, 320, 240)

class Panzer(pygame.sprite.Sprite):
    speed = 10
    images = []
    animcycle = 3
    frame = 0
    angle = 0
    def __init__(self):
        pygame.sprite.Sprite.__init__(self,self.containers)
        self.images.append(pygame.image.load('Panz.png').convert_alpha())
        self.images.append(pygame.image.load('Panza.png').convert_alpha())
        self.original_a = pygame.image.load('Panz.png').convert_alpha()
        self.original_b = pygame.image.load('Panza.png').convert_alpha()
        self.image = self.images[0]
        self.rect = self.image.get_rect(midleft=SCREENRECT.midleft)
        self.rect = self.image.get_rect(center = (SCREENRECT.centerx,SCREENRECT.centery))
    def move_vertical(self, moving_vertical):
        self.rect.move_ip(0 ,moving_vertical*self.speed)
        self.rect = self.rect.clamp(SCREENRECT)
        self.frame += 1
        self.imind = self.frame/self.animcycle%2
        self.image = self.images[self.imind]
    def move_horizontal(self, moving_horizontal):
        self.rect.move_ip(moving_horizontal*self.speed, 0)
        self.rect = self.rect.clamp(SCREENRECT)
    def rotate(self,rotate_left,rotate_right):
        center = self.rect.center
        if rotate_left == 2:
            self.angle += 5
        if rotate_right == 2:
            self.angle -= 5
        if self.angle == 360 or self.angle == 0:angle = 0
        self.images[0] = pygame.transform.rotate(self.original_a,self.angle)
        self.images[1] = pygame.transform.rotate(self.original_b,self.angle)
        self.rect = self.images[0].get_rect()
        self.rect.center = center

def main():
    pygame.init()
    pygame.display.set_caption('Panzer move')
    pygame.mouse.set_visible(0)
    screen = pygame.display.set_mode(SCREENRECT.size)
    background = pygame.Surface(screen.get_size())
    background.fill([0,0,255])
    clock = pygame.time.Clock()
    all = pygame.sprite.RenderUpdates()
    panzer = pygame.sprite.Group()
    Panzer.containers = all
    player = Panzer()
    while True:
        clock.tick(60)
        all.clear(screen, background)
        all.update()
        event = pygame.event.poll()
        if event.type == QUIT or \
           (event.type == KEYDOWN and event.key == K_q):
            break
        if event.type == KEYDOWN and event.key == K_ESCAPE:
            break
        keystate = pygame.key.get_pressed()  
        moving_vertical = keystate[K_DOWN] - keystate[K_UP]
        moving_horizontal = keystate[K_RIGHT] - keystate[K_LEFT] 
        rotate_left = keystate[K_DOWN] + keystate[K_UP]
        rotate_right = keystate[K_RIGHT] + keystate[K_LEFT] 
        player.move_vertical(moving_vertical)
        player.move_horizontal(moving_horizontal)
        player.rotate(rotate_left,rotate_right)
        screen.blit(background, (0, 0))
        dirty = all.draw(screen)
        pygame.display.update(dirty)
        pygame.display.flip()
        pygame.time.wait(50)
    pygame.quit()

if __name__ == '__main__': main()

Antworten