rechteck wir nach 2 eingaben nicht mehr gedreht.

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

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()
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann gib doch ab der dritten Eingabe einfach kein ganzzahlig-vielfaches von 2*PI an :lol:
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

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]
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

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() 
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

jup, so etwas habe ich gesucht.
jetzt kann ich mit den tasten alles steuern.

bin nicht drauf gekommen.

danke.

mfg
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

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

Antworten