Seite 1 von 1
rechteck wir nach 2 eingaben nicht mehr gedreht.
Verfasst: Mittwoch 7. Mai 2008, 19:50
von sechsrad
ich möchte ein rechteck drehen mit inputeingaben.
nach 2 abfragen dreht sich das rechteck nicht mehr.
woran liegt das?
mfg
Code: Alles auswählen
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode([320, 240], 0, 16)
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill([255,255,0])
bild_rect = pygame.Surface([50,50])
bild_rect.fill([255,0,255])
bild_rect.set_colorkey((255,0,255), RLEACCEL)
pygame.draw.rect(bild_rect, (255,0,0), (10,0,30,50),1)
angle=0
weiter = True
while weiter:
b = int(raw_input())
if b == 1:
weiter = False
angle=b
screen.blit(background, (0, 0))
bild = pygame.transform.rotate(bild_rect, angle)
bild1=bild.get_rect(center=(b,120))
screen.blit(bild,bild1 )
pygame.display.flip()
pygame.quit()
Verfasst: Mittwoch 7. Mai 2008, 20:23
von EyDu
Dann gib doch ab der dritten Eingabe einfach kein ganzzahlig-vielfaches von 2*PI an

Verfasst: Mittwoch 7. Mai 2008, 20:43
von sechsrad
warum läuft dieses schön bis 600 durch?
mfg
Code: Alles auswählen
for angle in xrange(0, 600, 2):
clock.tick(60)
b=b+1
screen.blit(background, (0, 0))
bild = pygame.transform.rotate(bild_rect, angle)
bild1=bild.get_rect(center=(b,120))
screen.blit(bild,bild1 )
pygame.display.flip()
[/code]
Verfasst: Donnerstag 8. Mai 2008, 18:51
von sea-live
so fliegt das rechteck unendlich abbruch mit escape
Code: Alles auswählen
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode([320, 240], 0, 16)
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill([255,255,0])
bild_rect = pygame.Surface([50,50])
bild_rect.fill([255,0,255])
bild_rect.set_colorkey((255,0,255), RLEACCEL)
pygame.draw.rect(bild_rect, (255,0,0), (10,0,30,50),1)
clock = pygame.time.Clock()
posx = 10
angle = 0
weiter = True
while weiter:
clock.tick(60)
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
angle +=2
if angle == 360:
angle = 0
posx += 1
if posx == 320:
posx = 0
screen.blit(background, (0, 0))
bild = pygame.transform.rotate(bild_rect, angle)
bild1=bild.get_rect(center=(posx,120))
screen.blit(bild,bild1 )
pygame.display.flip()
pygame.quit()
Verfasst: Donnerstag 8. Mai 2008, 18:59
von sechsrad
jup, so etwas habe ich gesucht.
jetzt kann ich mit den tasten alles steuern.
bin nicht drauf gekommen.
danke.
mfg
MEINE PANZERLÖSUNG
Verfasst: Dienstag 20. Mai 2008, 19:57
von sea-live
nur mit den Pfeiltasten hoch+runter linksrum links+rechts rechtsrum
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

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