Bilder drehen mit pygame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
mintpc
User
Beiträge: 50
Registriert: Montag 23. Januar 2012, 12:44

Hallo zusammen,

ich suche die Möglichkeit (den Befehl), ein mit pygame angezeigtes Bild (jpg)
zu drehen. Speziell hier einen Mauerstein, mit dem ein Labyrinth abgegrenzt wird,
der an der Seite des Labyrinths um 90° gedreht angezeigt wird.

Ich hatte "rotate" probliert, allerdings tat sich da nichts.

Gibt es überhaupt solch einen Befehl, ein Bild zu drehen?

Danke schonmal

mintpc

P.S: Das Bild in einem Grafikprogramm zu drehen geht natürlich, aber
so eine Lösung wäre für mich "nur zur Not".
BlackJack

@mintpc: `rotate()` verändert nicht das Originalsurface sondern erstellt ein neues. Steht so in der Dokumentation.
mintpc
User
Beiträge: 50
Registriert: Montag 23. Januar 2012, 12:44

Danke, dass "rotate" nicht klappt hatte ich ja schon geschrieben.

Ich wollte den Befehl, ein Bild zu drehen.

Geht das denn überhaupt???
BlackJack

@mintpc: Nein. Aber Du kannst mit `rotate()` ein gedrehtes Bild bekommen.
Benutzeravatar
StefanLawl
User
Beiträge: 92
Registriert: Donnerstag 7. Juni 2012, 20:23

mintpc hat geschrieben:Danke, dass "rotate" nicht klappt hatte ich ja schon geschrieben.

Ich wollte den Befehl, ein Bild zu drehen.

Geht das denn überhaupt???
Das hat doch BlackJack schon erklärt.
BlackJack hat geschrieben:@mintpc: `rotate()` verändert nicht das Originalsurface sondern erstellt ein neues.

Code: Alles auswählen

>>> x = ['b','i','l','d',]
>>> x
['b', 'i', 'l', 'd']
>>> ''.join(x)
'bild'
>>> x
['b', 'i', 'l', 'd']
>>> 
x ist also die Liste ['b','i','l','d',]. Obwohl ''.join(x) einfach 'bild' ausgibt, bleibt x immer noch die Liste.

Code: Alles auswählen

>>> z = ''.join(x)
>>> z
'bild'
>>> x
['b', 'i', 'l', 'd']
>>> 
z ist jetzt 'bild', x bleibt aber Liste (x).

Jetzt denk dir statt Listen und join() einfach Bilder und rotate() :mrgreen:

Stefan
Man sagt uns wir sollen der Idee gedenken und nicht des Mannes. Denn ein Mensch kann versagen. Er kann gefangen werden. Er kann getötet und vergessen werden. Aber 400 Jahre später kann eine Idee immer noch die Welt verändern.
-V
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Code: Alles auswählen

#! /python26/python.exe
#! coding: utf-8

"""
Simple demonstration on rotating an Image!
"""

import pygame
from pygame.locals import *

pygame.init()

SCREENSIZE = (640, 640)

screen = pygame.display.set_mode(SCREENSIZE, 0, 32)
pygame.display.set_caption("Angle: 0°")

scrcenter = screen.get_rect().center
print scrcenter
print type(scrcenter)

# Prepare Background and Arrow:
bg = pygame.Surface(SCREENSIZE)
bg.fill((120,120,120))

arrow = pygame.Surface((120,120), SRCALPHA)
pygame.draw.rect(arrow, (255, 0, 0), (0, 0, 120, 120))
# We need an image to rotate:
rotarrow = arrow.copy()
angle = 0

# We define centerpoints for the images/sprites.
CENTER = screen.get_rect().center
ACENTER = arrow.get_rect().center
ABS_CENTER = (CENTER[0] - ACENTER[0], CENTER[1] - ACENTER[1])

# 
keepGoing = True
clock = pygame.time.Clock()

while keepGoing:
    clock.tick(30)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            keepGoing = False
            
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                keepGoing = False
            elif event.key == pygame.K_RIGHT:
                angle -=  5
                rotarrow = pygame.transform.rotate(arrow, angle)
                
            elif event.key == pygame.K_LEFT:
                angle += 5
                rotarrow = pygame.transform.rotate(arrow, angle)
    
    # Get centerpoint of current rect
    ROTCENTER = rotarrow.get_rect().center
    ABS_CENTER = (CENTER[0] - ROTCENTER[0], CENTER[1]-ROTCENTER[1])
    
    # display current angle for info:
    pygame.display.set_caption("Angle: " + str(angle) + "°")
    
    screen.blit(bg, (0,0))
    screen.blit(rotarrow, ABS_CENTER)
    pygame.display.flip()
    
Gruß!
Antworten