Seite 1 von 1

[pygame] Wie verschiebe ich ein Rectangle

Verfasst: Samstag 28. Juli 2007, 22:40
von Damaskus
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

Verfasst: Sonntag 29. Juli 2007, 19:33
von SigMA
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?)

Verfasst: Sonntag 29. Juli 2007, 20:29
von Damaskus
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.

Verfasst: Sonntag 29. Juli 2007, 21:17
von BlackJack
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.

Verfasst: Montag 30. Juli 2007, 02:43
von veers

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

Verfasst: Montag 30. Juli 2007, 05:04
von Damaskus
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

Verfasst: Montag 30. Juli 2007, 07:04
von BlackJack
Nein, da hilft nur ein schneller Rechner. `surfarray` ist kein Array von Surfaces sondern Numeric-Arrays die direkt auf die Bilddaten eines Surface zugreifen.