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 :lol:

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