Verfasst: Dienstag 20. Mai 2008, 16:07
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


der Panzer springt noch etwas beim 90grad übergang
oder eine bessere idee
image
Panz.png Panza


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()