Wie kann man in pygame Gegner erstellen!?

2 Antworten

Es gibt eine copy-Methode.

https://www.pygame.org/docs/ref/rect.html#pygame.Rect.copy

Nun brauchst du die Methode nur noch fünfmal aufrufen. Das lässt sich mit einer einfachen Schleife kurz ausdrücken.

xXBasiXx 
Fragesteller
 27.09.2020, 18:04

Vielen Dank, das werde ich gleich mal ausprobieren.

0
xXBasiXx 
Fragesteller
 27.09.2020, 18:22

Man kann so aber nicht die Position verändern oder?

0
regex9  27.09.2020, 18:25
@xXBasiXx

Nein, die Funktion ist nur zum Kopieren da. So wie es ihr Name auch aussagt.

0
xXBasiXx 
Fragesteller
 27.09.2020, 18:32
@regex9

Okay. Aber ich will ja die Position verändern..... Z.B wie bei einem space invaders spiel sind ja auch mehrere Gegener da.

Ich will halt von einem Viereck 5 nebeneinaner...

for i in range(5):

#viereck erstellen

0
xXBasiXx 
Fragesteller
 27.09.2020, 18:36

Es erstellt sich kein neues Rechteck

import pygame
import random
import time
pygame.init()
screen = pygame.display.set_mode((700,600))

player_x = 300
player_y = 540

running = True
while running:
    pygame.time.delay(100)
    clock = pygame.time.Clock()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    screen.fill((0,0,0))         

    keys = pygame.key.get_pressed()
    if keys[pygame.K_a]:
        player_x -= 20
    if keys[pygame.K_d]:
        player_x += 20   

    
    test = pygame.draw.rect(screen,(255,0,0),(player_x,player_y,50,50))
    test.move(10,10)
    
    pygame.display.update()
pygame.quit()
0
regex9  27.09.2020, 18:44
@xXBasiXx

Verschieben (move) und kopieren (copy) sind zwei unterschiedliche Vorgänge, die natürlich separat aufgerufen werden müssen.

Statt copy könnte man das Viereck auch einfach x-Mal mittels Schleife zeichnen lassen. Jede Instanz lässt sich gut in einer Liste speichern.

0
xXBasiXx 
Fragesteller
 27.09.2020, 18:48
@regex9

Habe das oft mit einer Liste gesehen aber verstehen tue ich es nicht...

enemies = []
anzahl = 5

for i in range(anzahl):
    #erstellen
0
xXBasiXx 
Fragesteller
 27.09.2020, 18:49
@regex9
Jede Instanz lässt sich gut in einer Liste speichern.

Wie meinst du das?!

0
regex9  27.09.2020, 18:52
@xXBasiXx

Na was hast du denn gerade in deinem vorherigen Kommentar geschrieben? Dort hast du dir diese Frage doch quasi schon selbst beantwortet.

0
regex9  27.09.2020, 18:59
@xXBasiXx

Denke doch bitte einmal nach. Wie du ein Rechteck erstellen kannst, siehst du in deinem obigen Snippet. Wie du es kopieren/duplizieren kannst, habe ich dir bereits geschrieben. Wie eine Schleife funktioniert und was Listen sind, weißt du offensichtlich. Wie man ein Rechteck bewegen kann, hat dir Brockdish geschrieben. Das nun alles nur noch in richtiger Reihenfolge zusammenzufügen, kann doch wirklich kein Problem sein.

  1. Rechteck erstellen und in Liste speichern
  2. Rechteck x-Mal kopieren, bewegen und ebenso jeweils in Liste speichern

Die Speicherung in der Liste ermöglicht dir weiteren Zugriff auf die erstellen Rechtecke.

0
xXBasiXx 
Fragesteller
 27.09.2020, 19:03
@regex9

Sorry aber ich habe davor noch nicht in einer Liste gearbeitet kann nur zahlen in eine Liste einfügen und dann die liste ausgeben....

  1. Wie kann ich das rechteck in eine Liste speichern??
  2. kopieren = copy() ?? Bewegen geht ja nicht.... Wie in eine Liste speichern...

bin glaube ich recht dumm sorry

0
xXBasiXx 
Fragesteller
 27.09.2020, 19:09
@regex9

Uff..... Das kann nicht sein das ich schon seit 2 Wochen an diesem Problem sitze und niemand mir weiter helfen kann :(

werde erstmal aufhören mit programmieren habe gerade garkeine motivation mehr ...

0
regex9  27.09.2020, 19:12
@xXBasiXx

Du hast Hilfe und eine Lösung erhalten. Auf der anderen Seite musst du aber einen gewissen Eigenanteil leisten. Das wäre in dem Fall Grundlagen nachholen. Ohne die wirst du nicht weiterkommen / auch bei anderen Problemen scheitern.

0

Weist du nicht, wie man sie benutzt, wie man sie erstellt, oder wie man sie bearbeitet, oder kannst du es nicht umsetzen?