[pygame] Wie verschiebe ich ein Rectangle

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

[pygame] Wie verschiebe ich ein Rectangle

Beitragvon Damaskus » 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:

Beitragvon SigMA » 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: 890
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Beitragvon Damaskus » 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

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

Beitragvon veers » 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: 890
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Beitragvon Damaskus » 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

Beitragvon 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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder