[pygame] Wie verschiebe ich ein Rectangle

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzeravatar
Damaskus
Administrator
Beiträge: 909
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Samstag 28. Juli 2007, 22:40

Moin,
wie kann ich "punkt" verschieben?
Mit Rect.move() sollte es funktionieren. Aber irgendwie scheiter ich daran.

Code: Alles auswählen

# -*- encoding: latin-1 -*- 

import pygame 
from pygame.locals import * 

def main(): 
    # Initialise screen 
    pygame.init() 
    screen = pygame.display.set_mode((500, 100)) 
    pygame.display.set_caption('Basic Pygame program') 

    # Fill background 
    background = pygame.Surface(screen.get_size()) 
    background = background.convert() 
    background.fill((0, 0, 0)) 

    # Display some text 
    punkt = pygame.draw.rect(background, (255, 255, 255), (0, 0, 3, 3), 0)
    background.blit(background, punkt) 

    # Blit everything to the screen 
    screen.blit(background, (0, 0)) 
    pygame.display.flip() 

    # Event loop 
    while True: 
        for event in pygame.event.get(): 
            if event.type == QUIT: 
                return 
        
        punkt.move(10, 10)
        screen.blit(background, (0, 0)) 
        pygame.display.flip() 

if __name__ == '__main__': 
    main()
Thx für eure Hilfe
Mfg
Damaskus



Edit: move() hinzugefügt
Zuletzt geändert von Damaskus am Sonntag 29. Juli 2007, 20:31, insgesamt 1-mal geändert.
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

Sonntag 29. Juli 2007, 19:33

Du bewegst nichts. Du muss ihm schon sagen, dass er alle paar Sekunden den Punkt bewegen soll sonst klappt es nicht (oder habe ich was überlesen?)
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
Benutzeravatar
Damaskus
Administrator
Beiträge: 909
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Sonntag 29. Juli 2007, 20:29

ja und wie mache ich das?
Wenn ich rect.move() aufrufe und den Punkt um x Pixel bewege werden zwar die Werte von "punkt" geändert, aber auf dem Bildschirm bewegt sich nichts.

Ist mein erster Versuch mit Pygame, kann gut sein das ich irgendetwas übersehe bzw. das da noch was fehlt.

Gruß
Damaskus



Edit: Ok, move() fehlt in den Snippet oben :roll: aber auch wenn es drinn ist funktionierts nicht.
BlackJack

Sonntag 29. Juli 2007, 21:17

Auf dem Bildschirm bewegt sich nichts automatisch. Du musst alles selber machen. Zum Beispiel einen Hintergrund und das Rechteck in Surfaces halten, dann auf dem Surface, das angezeigt werden soll, an der alten Stelle wieder den Hintergrund kopieren, das Rechteck verschieben, neu zeichnen, Anzeige aktualisieren und alles von vorne.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Montag 30. Juli 2007, 02:43

Code: Alles auswählen

# -*- encoding: latin-1 -*-
import time
import pygame
from pygame.locals import *

def main():
    # Initialise screen
    pygame.init()
    screen = pygame.display.set_mode((500, 100))
    pygame.display.set_caption('Basic Pygame program')

    # Fill the punkt :D
    punkt = pygame.Surface((10, 10))
    punkt.fill((255, 255, 255))

    # Event loop
    i = 0
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                return
       
        i += 1
        # clear background
        screen.fill((0, 0, 0))
        # draw the punkt
        screen.blit(punkt, (i%500, i%100))
        # flip the buffers
        pygame.display.flip()
        time.sleep(0.1)

if __name__ == '__main__':
    main()
So gehts :)
Benutzeravatar
Damaskus
Administrator
Beiträge: 909
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Montag 30. Juli 2007, 05:04

Genial!
Thx nun versteh ichs, punkt muss als Surface definiert werden...

Und wenn ich nun so ca. 3.000 von den Punkten hab, die sich auch noch flüssig bewegen sollen, dann empfiehlt es sich warscheinlich surfarray zu verwenden. Oder?

Thx
Damaskus
BlackJack

Montag 30. Juli 2007, 07:04

Nein, da hilft nur ein schneller Rechner. `surfarray` ist kein Array von Surfaces sondern Numeric-Arrays die direkt auf die Bilddaten eines Surface zugreifen.
Antworten