UFO - Fight
Übersicht

cleminatorBetreff: UFO - Fight |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo! Hab mir heute gedacht ich schreib mal so ne art Moorhuhn nur mid Ufos... So halt auch alles ziemlich gut geklappt. Mein Problem ist nur eines:
Alle Ufos sind Types. So Wenn ich jetzt irgend eines abschiesse dann passiert nix, ziel ich auf das "Älteste" Also auf das Ufo das von allen die gerade auf dem Bildschrim sind zuerst erstellte dann wird es gelöscht. Was muss ich machen damit jedes das ich anklicke gelöscht wird. (Also nicht wenn ich auf eines Zeile alle sondern einfach jedes auf das ich Klicke) ...Wieder mal unglücklich formuliert..aber vielleicht bringts ja was (PS: Habs übrigens schon mit jedem Typestutorial versucht ich versteh keines.) Hier der CODE: Code: [AUSKLAPPEN] Graphics 1024,768,32,1 SetBuffer BackBuffer() ;Globals Global bgmenu = LoadAnimImage("bg-menu.bmp",1024,768,0,2) Global ufo = LoadImage("ufo.bmp") Global cursor = LoadAnimImage("cursor.bmp",19,22,0,3) Global bggame = LoadImage("bg-game.jpg") Global menuschleife = True Global bgframe = 0 Global spieleschleife = False Global timeup = False Global timer Global gegner Global restzeit = 4 ;Einstellungen der Images MaskImage cursor,255,0,255 MaskImage ufo, 255,0,255 ;Types Type enemy Field x,y Field speed# End Type SeedRnd(MilliSecs()) ;Functions Function menusteuerung() If KeyHit(208) Then bgframe = bgframe + 1 EndIf If KeyHit(200) Then bgframe = bgframe - 1 EndIf If bgframe > 1 Then bgframe = 0 EndIf If bgframe < 0 Then bgframe = 1 EndIf If bgframe > 0 And KeyHit(28) Then menuschleife = False EndIf If bgframe < 1 And KeyDown(28) Then menuschleife = False FlushKeys spieleschleife = True EndIf End Function Function neuergegner() If MilliSecs() > timer + Rnd(800,2000) Then gegner = Rnd(0,10) If gegner < 5 Then n.enemy = New enemy n\x = -80 n\y = Rnd(50,700) n\speed = Rnd(1,3) EndIf If gegner > 5 Then g.enemy = New enemy g\x = 1050 g\y = Rnd(50,700) g\speed = Rnd(-3,-1) EndIf timer = MilliSecs() EndIf End Function Function updategegner() For n.enemy = Each enemy DrawImage ufo,n\x,n\y n\x = n\x + n\speed Next For g.enemy = Each enemy DrawImage ufo,g\x,g\y g\x = g\x + g\speed Next End Function Function gegnerabschiessen() For n.enemy = Each enemy If ImagesCollide(ufo,n\x,n\y,0,cursor,MouseX(),MouseY(),0) And MouseHit(1) Delete n.enemy Exit EndIf Next For g.enemy = Each enemy If ImagesCollide(ufo,g\x,g\y,0,cursor,MouseX(),MouseY(),0) And MouseHit(1) Delete g.enemy Exit EndIf Next End Function ;Menüschleife Repeat Cls DrawImage bgmenu,0,0,bgframe menusteuerung() Flip Until menuschleife = False ;Spielschleife If spieleschleife = False Goto ende EndIf Repeat Cls If MilliSecs() > timer + 1000 restzeit = restzeit - 1 timer = MilliSecs() EndIf If restzeit < 1 Then timeup = True EndIf Text 410,330, "Noch " + restzeit + " bis zum Start!" FlushKeys Flip Until timeup = True ;______ Repeat Cls DrawImage bggame,0,0 neuergegner() updategegner() gegnerabschiessen() DrawImage cursor,MouseX(),MouseY(),0 If KeyHit(1) Then Goto ende EndIf Flip Until spieleschleife = False ;______ .ende End |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
erstmal glaub ich du hast den sinn einer For-Each schleife noch nicht verstanden! Ich mein sie durchläuft alle Objekte und da lässt beim löschen 2 mal eine durchlaufen für die verschiedenen Instanzierungen Ö.ö
Ausserdem wundert mich es, das es so funktioniert! Ich dachte immer damit funktionen etwas an Types ändern können/welche erstellen können müssen sie als "Datentyp" den Type haben also: Updategegner.enemy() Hoffe das hilft dir schonmal weiter! MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dein Problem liegt an Mousehit(1)!
Code: [AUSKLAPPEN] ; MainLoop MH = Mousehit(1) Function gegnerabschiessen () if MH then For n.enemy = Each enemy If ImagesCollide (ufo,n\x,n\y,0,cursor,MouseX () ,MouseY () ,0) And Then Delete n.enemy Exit EndIf Next End If End Function Wenn du Mousehit() oder Keyhit() benutzt wird dieser automatisch auf 0 zurück gesetzt, bzw geleert! Da ist es am besten wenn du das nur einmal in der Mainloop machst und den Wert in einer globalen Variablen speicherst. Deine doppelten Schleifen bringen dir da auch nichts! Weiter habe ich es mir auch nicht angesehen, kannst das ja erst mal abändern! |
||
[BB2D | BB3D | BB+]
|
cleminator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ 5k41 ne also deine antwort hab ich gar nicht gecheckt *gg* ...
@Rallimen Jetzt funtzt gar nix mehr.. Achja und als ich angefangen hab mal ein bischen Types zu verstehen hab ich mir einfach mal das Spiel "Heli Hunter" von Robs-Kurs hergenommen.da ist es auch so ähnlich drin...fällt mir grad ein, ich sollte mal reinschauen vl find ich da ne lösung |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was genau funzt nicht mehr?
Vielleicht vergessen MH als Global zu deklariern? |
||
[BB2D | BB3D | BB+]
|
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja eine For-Each schleife läuft alle Objekte durch (in deinem Fall die von Enemy) heißt die n.enemy und die g.enemy (BEIDE), das heißt, das du beim löschen nur eine schleife brauchst, da die Namen der Instanzierungen (ableitungen eines Types die per New erstellt werden) nicht berücksichtigt werden.
Zu dem MouseHit problem: Würden statt mousehit mousedown und nen Timer nehmen, da du jenen sowieso später noch fürs nachladen brauchst und du dir die sache per mousehit nur unnötig komplex machst ![]() MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke mal das es für einen Anfänger schwer ist, sich selbst ein Mausehit mit Mousdown zu basteln!
Und das nachladen wird doch mit der rechten Maustaste gemacht! |
||
[BB2D | BB3D | BB+]
|
cleminator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
okay danke! | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group