Problem mit dem kompletten Code (wie sich rausstellte)
Übersicht

Gehe zu Seite 1, 2, 3, 4, 5 Weiter
![]() |
ChrissaBetreff: Problem mit dem kompletten Code (wie sich rausstellte) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei mir kommt immer gleich nach Start des Programms die Fehlermeldung: "Not enough Frames in Bitmap"
Das kann aber nicht sein, da ich nirgends in meinem Programm eine bmp-Datei lade. Oder ist diese Fehlermeldung unabhängig vom "fehlerhaften" Dateityp? Wenn er euch hilft, hier ist der Quelltext: BlitzBasic: [AUSKLAPPEN] .oben EDIT 19.1.2010 14:14 Das Problem liegt anscheinend an der Zeile: e1_death=LoadAnimImage("alien death anim.png",610,118,0,3) , denn erst seit ich diese eingefügt habe, geht es nicht mehr... Die Zeile stimmt doch oder? Danke schon mal im Voraus ![]() |
||
- Zuletzt bearbeitet von Chrissa am Di, Jan 19, 2010 19:34, insgesamt 5-mal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sind die 4 Einzelbilder Deiner Animation wirklich jeweils 610 pixel breit?
Zitat: e1_death=LoadAnimImage("alien death anim.png",610,118,0,3)
|
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine Bitmap ist nicht gleich eine BMP-Datei, sondern eine BMP-Datei ist eine Bitmap, wie auch PNG, JPG, PCX, GIF etc...
Die Alternative zu einer Bitmap ist eine Vektor-Grafik. Wenn du nun e1_death=LoadAnimImage("alien death anim.png",610,118,0,3) hin schreibst, erwartet der Befehl eine Bilddatei ''Bitmap'' von mindestens den Ausmaßen von 1830x118 oder 1220x236 oder 610x354 Pixeln, da du 3 Frames mit diesen Größen daraus grabbst. Wie groß ist sind denn die Ausmaße der Kantenlängen von ''alien death anim.png''? |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
ach so^^ verdammt nein das ist die Breite des gesamten Bildes^^ aber eigentlich sind es nur 3 Bilder... Warum meinst du es seien 4?
Das Bild ist 610x118 Pixel groß... PS: Da ich es jetzt durch 3 geteilt habe funktioniert es, aber leider viel zu schnell.... - trotzdem danke ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für eine langsamer Animation kannst du einen selbst gebastelten Timer alá MilliSecs![]() ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kapier ich jetzt nicht so ganz... Wie meinst du das? Soll ich dann einen 3. Parameter für das DrawImage machen, der den Timer beinhaltet?
PS: Mein Kumpel meinte ich solle eine For-Schleife darum machen. Etwa so: Mein Code: Code: [AUSKLAPPEN] For i = 0 To 2
DrawImage e2_death,bla\x,bla\y,i blabla\health=0 blabla\x=-10000000000000000000 Next Sein Code: Code: [AUSKLAPPEN] For i = 0 To 2
DrawImage (e1_anim,noob\f_x,noob\f_y,i) noob\f_alive = 0 noob\f_y = -100000000000 Next Funktioniert bei ihm, aber iwie nich bei mir... was mache ich falsch? |
||
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh gott nein. doch keine for-schleife.
In einer for-schleife wird die hauptschleife erstmal nicht weitergeführt, so dass nicht geflippt oder ähnliches wird, sprich du siehst die zwischenschritte gar nicht. machs mit millisecs() Den timer sollst du nicht machen. du sollst den aktuellen frame in dem parameter haben, der mit ablauf des timers um 1 erhöht wird und mit Mod 3 nach ablauf des bildes wieder auf 0 gesetzt wird... |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
neinnein, deine
DrawImage (e1_anim,noob\f_x,noob\f_y,i) hat doch hinten den Parameter i und der darf einfach nicht so schnell von 0 bis 2 durchlaufen, wie er das mit einer FOR/NEXT schafft: BlitzBasic: [AUSKLAPPEN] Function AnimAblauf() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finde den Code doch etwas komisch Midimaster. Sein Programm wird doch nicht nur die eine Animation anzeigen, sondern nebenbei auch noch eine Spielemechanik beinhalten. Da würde ich lieber folgendes vorschlagen:
Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() Local Timer=CreateTimer(58) Local Frame1Count Local Frame1Wait Local MS While Not KeyHit(1) MS=MilliSecs() If MS>Frame1Wait Then Frame1Count=(Frame1Count+1) Mod 4 Frame1Wait=MS+500 End If Text MouseX()-20,MouseY(),Frame1Count WaitTimer Timer Flip 0 Cls Wend End Aber ich lasse mich gerne vom Gegenteil überzeugen. Der Code beinhaltet einen Framezähler und ein nebeher laufendem Programm. Der Timer reduziert das ganze auf nahe 60 FPS, was den meisten Flachbildschirmen entspricht. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann trage ich also für die Animation DrawImage e1_death,bla\x,bla\y,Frame1Count anstatt dein Text ein, richtig?
Das Problem ist jetzt nur: "Memory acces violation" Markiert ist die Zeile: "Waittimer Timer" Hier der Code: Code: [AUSKLAPPEN] ;Enemy Dies
For noob.schuss=Each schuss For bla.alien=Each alien For blabla.ufo=Each ufo If ImagesCollide(noob\s_type,noob\x,noob\y,0,alien,bla\x,bla\y,0) Then bla\health=bla\health-noob\strength noob\x=-10000000000000 If bla\health <= 0 Then Local Timer=CreateTimer(58) Local Frame1Count Local Frame1Wait Local MS MS=MilliSecs() If MS>Frame1Wait Then Frame1Count=(Frame1Count+1) Mod 4 Frame1Wait=MS+500 DrawImage e1_death,bla\x,bla\y,Frame1Count EndIf bla\x=-1000000000000000000 bla\health=0 EndIf EndIf If ImagesCollide(noob\s_type,noob\x,noob\y,0,ufo,blabla\x,blabla\y,0) Then blabla\health=blabla\health-noob\strength noob\x=-100000000000000 If blabla\health <=0 Then MS=MilliSecs() If MS>Frame1Wait Then Frame1Count=(Frame1Count+1) Mod 4 Frame1Wait=MS+500 EndIf DrawImage e2_death,bla\x,bla\y,Frame1Count WaitTimer Timer blabla\health=0 blabla\x=-10000000000000000000 EndIf EndIf If ImagesCollide(shuttle,lol\x,lol\y,0,alien,bla\x,bla\y,0) Then player_health=player_health-50 EndIf If ImagesCollide(shuttle,lol\x,lol\y,0,ufo,blabla\x,blabla\y,0) Then player_health=player_health-100 EndIf If player_health <=0 Then DrawImage gameover,1280/2,1024/2 Delay 2000 End EndIf Next Next Next |
||
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Rücke deinen Code bitte ein ![]() Ich denke wenn du bei Waittimer einen MAV bekommst, ist eben kein timer da. Tippfehler bei der variable? |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dreifach verschachtelte For..each Schleifen, Variablen die ganz eindeutig falsch sind (der Wert -10000000000000 -10 Billiarden- kann eine Interger Variable nicht enthalten...), und innerhalb der dreifachen verschachtelung ein Waittimer, ganz abgesehen von Delay...
Bitte schau dir mal ein paar Tutorials an wenn du das noch nicht gemacht hast und mach dich erst mal mit kleinen Beispielen mit den Befehlen vertraut die du benutzt. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dein Schreibstil sieht leider sehr nach Spaghetti-Code aus. Ich nehme einmal an, das in dieser Code dazu dient festzustellen, ob ein Enemy stirbt.
Dazu mußt Du die Kollisionen überprüfen. Immer wenn etwas stirbt solltest Du in die Funktion SterbeAnimation wechseln. Die wird in eine Funktion ausgelagert und dann von den verschiedenen Stellen Deines Codes angesprungen. Diese SterbeAnimation muss natürlich wissen, wer gestorben ist, deshalb musst Du ihr den Enemy als Parameter übergeben. Das ist zwar keine 100% optimale Lösung, aber vielleicht das, was Du in diesen Code auch selbst einbauen kannst. Auch ich habe den Eindruck, dass Du selbst nicht ganz verstanden hast, was Du hier genau mit den Befehlen bewirkst. Beispiel: Wenn Du Kollisionen testest, dann doch immer nur 2 Objekte miteinander. Das können dann höchsten 2fach verschachtelte FOR/NEXT sein. Dafür dann 3 Blöcke hintereinander oder? BlitzBasic: [AUSKLAPPEN] For A.Typ1= Each.. Der WAITTIMER geht nicht, weil Du die Variable TIMER local gemacht hast. vielleicht wirfst Du ma ein Auge auf meine drei Tutorials: https://www.blitzforum.de/foru...hp?t=33456 https://www.blitzforum.de/foru...hp?t=33468 https://www.blitzforum.de/foru...hp?t=33510 Hier ein paar Tipps zum Umbau Deines Codes: Erst einmal rückst Du alle Strukturen bitte ein. Dann gliederst Du alle Aktionen wie z.B. "Alien neu" in jeweils eine Funktion aus. Diese Funktionen werden dabei entstehen: - Screen malen - Neues Alien erschaffen - Neues Ufo - Waffenwahl - Schuss abgeben -Kollisionen checken - Enemy stirbt -Spieler bewegt sich Diesen Code stellst Du wieder hier ins Forum zur Diskussion. Dazu wird es dann diese Main-Schleife geben: BlitzBasic: [AUSKLAPPEN] While Not KeyDown(1) ...und länger sollte die Mainschleife gar nicht werden! Ich helfe Dir gern dabei, da genau dies auch das Thema meines nächsten Tutorials Grundsätzlicher Aufbau eines Spiels wird |
||
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
das Problem dabei ist, dass ich nicht wirklich kapiere wie man dann eine fertige function abspielt ![]() ![]() ![]() Und was meint ihr mit Code einrücken? EDIT: Blöder Weise bekomme ich jetzt die Fehlermeldung: "Function can only appear in Main Programm" ... Jetzt bin ich am Ende mit meinem Latein ![]() ![]() |
||
- Zuletzt bearbeitet von Chrissa am Di, Dez 29, 2009 23:06, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Funktionen sind very easy
Du nimmtst einen Teil aus dem Main-Programm (Main-Programm=damit meine ich den lange Code von Dir) und schreibst es ganz unten an das Ende deines Codes. Und an die Stelle, wo jetzt das Loch klafft, kommt der Funktionsaufruf. Probier das mal mit dem Block "Alien spawn", aber lass das Malen im Hauptprogramm. Unten soll dann eine Funktion AlienSpawn() stehen, in der nix anderes geschieht, als das ein neues Alien entsteht. Schreib mir das Eregbnis hier. Einrücken: lies mal Kapitel 1 meines "Fehler vermeiden" Tutorial: https://www.blitzforum.de/foru...highlight= geht ganz schnell, hift aber... |
||
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
So hier der Code:
Code: [AUSKLAPPEN] AppTitle "Space Shooter"
Graphics 1280,1024,32,1 SetBuffer BackBuffer() AutoMidHandle(True) ;Globals Global player_x = 1280/2 Global player_y = 900 Global player_health=1000 Global ufo_x = 1280/2 Global ufo_y = 0 Global count_en=0 Global count_ufo=0 Global waffe = 1 Type schuss Field x Field y Field s_type Field strength Field speed End Type Type alien Field x Field y Field health End Type Type ufo Field x Field y Field health End Type Type player Field x Field y Field health End Type lol.player=New player lol\x=1280/2 lol\y=800 lol\health=1000 ;Images space=LoadImage("space.png") alien=LoadImage("alien.png") shuttle=LoadImage("shuttle.png") ufo=LoadImage("ufo.png") kugel=LoadImage("schuss_2.png") laser=LoadImage("schuss_1.png") rocket=LoadImage("schuss_3.png") shuttle_fire=LoadImage("rocket fire.png") e1_death=LoadAnimImage("alien death anim.png",203,118,0,3) e2_death=LoadAnimImage("ufo death anim.png",239,118,0,3) gameover=LoadImage("Game Over.png") ;Game While Not KeyDown(1) Cls DrawImage space,1280/2,1024/2 DrawImage shuttle,lol\x,lol\y Flip Wend End ;Funtkion Spielerbewegung Function move(2) If KeyDown(203) lol\x=lol\x-8 EndIf If KeyDown(205) lol\x=lol\x+8 EndIf If KeyDown(208) lol\y=lol\y+8 EndIf If KeyDown(200) lol\y=lol\y-8 DrawImage shuttle_fire,lol\x-4,lol\y+55 EndIf If lol\x <= 80 Then lol\x = 80 If lol\x >= 1220 Then lol\x=1220 If lol\y <= 80 Then lol\y=80 If lol\y >= 944 Then lol\y=944 End Function ;Funktion Alienspawn Function alien(3) count_en = count_en +1 If count_en >=100 Then count_en=0 bla.alien=New alien bla\x=Rnd(20,1260) bla\y=-50 bla\health=100 EndIf For bla.alien = Each alien bla\y=bla\y+5 DrawImage alien,bla\x,bla\y Next End Function ;Funktion Ufospawn Function ufo(4) count_ufo = count_ufo +1 If count_ufo >=300 Then count_ufo=0 blabla.ufo=New ufo blabla\x=Rnd(20,1260) blabla\y=-50 blabla\health=300 EndIf For blabla.ufo = Each ufo blabla\y=blabla\y+3 DrawImage ufo,blabla\x,blabla\y Next End Function ;Funktion Select Weapon und schießen Function waffe(5) If KeyHit(56) Then waffe=waffe+1 If waffe=4 Then waffe=1 Select waffe Case 1 If KeyHit(57) Then noob.schuss = New schuss noob\x=lol\x-10 noob\y=lol\y+20 noob\s_type= kugel noob\speed = 10 noob\strength = 10 DrawImage kugel,noob\x,noob\y-40 EndIf Case 2 If KeyHit(57) Then noob.schuss = New schuss noob\x=lol\x-10 noob\y=lol\y+20 noob\speed = 20 noob\s_type= laser noob\strength=50 DrawImage rocket,noob\x,noob\y-40 EndIf Case 3 If KeyHit(57) noob.schuss = New schuss noob\x=lol\x-10 noob\y=lol\y+20 noob\s_type= rocket noob\speed=6 noob\strength=100 DrawImage rocket,noob\x,noob\y-40 EndIf End Select For noob.schuss = Each schuss noob\y=noob\y-noob\speed DrawImage noob\s_type,noob\x,noob\y-40 Next End Function ;Funktion Alien Dies Function e1_dies(6) For noob.schuss=Each schuss For bla.alien=Each alien If ImagesCollide(noob\s_type,noob\x,noob\y,0,alien,bla\x,bla\y,0) Then bla\health=bla\health-noob\strength noob\x=-100000 If bla\health <= 0 Then Local Timer=CreateTimer(58) Local Frame1Count Local Frame1Wait Local MS MS=MilliSecs() If MS>Frame1Wait Then Frame1Count=(Frame1Count+1) Mod 4 Frame1Wait=MS+500 DrawImage e1_death,bla\x,bla\y,Frame1Count EndIf bla\x=-1000000 bla\health=0 EndIf EndIf Next Next ;Funktion Ufo Dies Function e2_dies(7) For noob.schuss=Each schuss For blabla.ufo=Each ufo If ImagesCollide(noob\s_type,noob\x,noob\y,0,ufo,blabla\x,blabla\y,0) Then blabla\health=blabla\health-noob\strength noob\x=-10000 If blabla\health <=0 Then MS=MilliSecs() If MS>Frame1Wait Then Frame1Count=(Frame1Count+1) Mod 4 Frame1Wait=MS+500 EndIf DrawImage e2_death,bla\x,bla\y,Frame1Count WaitTimer Timer blabla\health=0 blabla\x=-100000 EndIf EndIf Next Next End Function ;Funktion Player Dies Function pl_dies(8) For bla.alien=Each alien For lol.player=Each player If ImagesCollide(shuttle,lol\x,lol\y,0,alien,bla\x,bla\y,0) Then player_health=player_health-50 EndIf Next Next For blabla.ufo=Each alien For lol.player=Each player If ImagesCollide(shuttle,lol\x,lol\y,0,ufo,blabla\x,blabla\y,0) Then player_health=player_health-100 EndIf Next Next If player_health <=0 Then DrawImage gameover,1280/2,1024/2 Delay 2000 End EndIf End Function Die Funktionsaufrufe hab ich noch nicht drinn, weil ich nicht kapiere wie das gehen soll... Genau das gleiche mit den Parametern in den Klmmaern der Funtionen... ![]() PS: Deine Tutorials sind echt gut thxx ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
einfach den Namen der Funktion an dies Stelle schreiben, wo du den code vorher entfernt hast.
Allerdings bist du gleich ganz schön weit gegangen. hast du das original noch? du solltest erst mal nur den alienspan rausnehmen, dann diskutieren wir darüber, dann machst du den nächsten schritt, usw am ende kannst du es für immer sind keine zeilen jetzt schon eingerückt? im forum sehen sie ja ziemlich platt aus: Zitat: Global waffe = 1
Type schuss Field x Field y Field s_type Field strength Field speed End Type und so sollte es aussehen: BlitzBasic: [AUSKLAPPEN] Global waffe = 1 oder so: BlitzBasic: [AUSKLAPPEN] Function Alienspawn() Fragen dazu: 1. warum nennst du die Funktion nicht einfach AlienSpawn() ? Das ist erlaubt. 2. warum machst du so nummern in die funktionen: Function ufo(4)??? Das ist unnötig! 3. warum nennst Du die localen Typen blabla? Wie wäre es mit tempUfo (für temporäres (Ufo) oder so. Nur "Ufo" ginge auch, aber leider heißt dein Type ja "Ufo". Für Typen schlage ich daher immer "UfoTyp" vor. Tipps: Du kannst die Mal-Befehle auch in den Funktionen lassen, aber ich würde dafür schon wieder neue Funktionen schreiben, oder sie erst mal im Main-Programm belassen. |
||
- Zuletzt bearbeitet von Midimaster am Do, Dez 31, 2009 0:35, insgesamt 2-mal bearbeitet
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Vorgänger version noch und eine so genannte bb_bak1 datei, die sich auch öffnen lässt ![]() da schreib ich dann z.B. einfach alien() . mehr nicht? jez is alles eingerückt: Code: [AUSKLAPPEN] AppTitle "Space Shooter"
Graphics 1280,1024,32,1 SetBuffer BackBuffer() AutoMidHandle(True) ;Globals Global count_en=0 Global count_ufo=0 Global waffe = 1 Type schuss Field x Field y Field s_type Field strength Field speed End Type Type alien Field x Field y Field health End Type Type ufo Field x Field y Field health End Type Type player Field x Field y Field health End Type Global pl.player=New player pl\x=1280/2 pl\y=800 pl\health=1000 ;Images space=LoadImage("space.png") alien=LoadImage("alien.png") shuttle=LoadImage("shuttle.png") ufo=LoadImage("ufo.png") kugel=LoadImage("schuss_2.png") laser=LoadImage("schuss_1.png") rocket=LoadImage("schuss_3.png") shuttle_fire=LoadImage("rocket fire.png") e1_death=LoadAnimImage("alien death anim.png",203,118,0,3) e2_death=LoadAnimImage("ufo death anim.png",239,118,0,3) gameover=LoadImage("Game Over.png") ;Game While Not KeyDown(1) Cls DrawImage space,1280/2,1024/2 DrawImage shuttle,pl\x,pl\y move() AlienSpawn() UfoSpawn() waffe() e1_dies() e2_dies() pl_dies() Flip Wend End ;Funtkion Spielerbewegung Function move() If KeyDown(203) pl\x=pl\x-8 EndIf If KeyDown(205) pl\x=pl\x+8 EndIf If KeyDown(208) pl\y=pl\y+8 EndIf If KeyDown(200) pl\y=pl\y-8 DrawImage shuttle_fire,pl\x-4,pl\y+55 EndIf If pl\x <= 80 Then pl\x = 80 EndIf If pl\x >= 1220 Then pl\x=1220 EndIf If pl\y <= 80 Then pl\y=80 EndIf If pl\y >= 944 Then pl\y=944 EndIf End Function ;Funktion Alienspawn Function AlienSpawn() count_en = count_en +1 If count_en >=100 Then count_en=0 typ_1.alien=New alien typ_1\x=Rnd(20,1260) typ_1\y=-50 typ_1\health=100 EndIf For typ_1.alien = Each alien typ_1\y=typ_1\y+5 DrawImage alien,typ_1\x,typ_1\y Next End Function ;Funktion Ufospawn Function UfoSpawn() count_ufo = count_ufo +1 If count_ufo >=300 Then count_ufo=0 typ_2.ufo=New ufo typ_2\x=Rnd(20,1260) typ_2\y=-50 typ_2\health=300 EndIf For typ_2.ufo = Each ufo typ_2\y=typ_2\y+3 DrawImage ufo,typ_2\x,typ_2\y Next End Function ;Funktion Select Weapon und schießen Function waffe() If KeyHit(56) Then waffe=waffe+1 If waffe=4 Then waffe=1 Select waffe Case 1 If KeyHit(57) Then typ.schuss = New schuss typ\x=pl\x-10 typ\y=pl\y+20 typ\s_type= kugel typ\speed = 10 typ\strength = 10 DrawImage kugel,typ\x,typ\y-40 EndIf Case 2 If KeyHit(57) Then typ.schuss = New schuss typ\x=pl\x-10 typ\y=pl\y+20 typ\speed = 20 typ\s_type= laser typ\strength=50 DrawImage rocket,typ\x,typ\y-40 EndIf Case 3 If KeyHit(57) typ.schuss = New schuss typ\x=pl\x-10 typ\y=pl\y+20 typ\s_type= rocket typ\speed=6 typ\strength=100 DrawImage rocket,typ\x,typ\y-40 EndIf End Select For typ.schuss = Each schuss typ\y=typ\y-typ\speed DrawImage typ\s_type,typ\x,typ\y-40 Next End Function ;Funktion Alien Dies Function e1_dies() For typ.schuss=Each schuss For typ_1.alien=Each alien If ImagesCollide(typ\s_type,typ\x,typ\y,0,alien,typ_1\x,typ_1\y,0) Then typ_1\health=typ_1\health-typ\strength typ\x=-100000 If typ_1\health <= 0 Then Local Timer=CreateTimer(58) Local Frame1Count Local Frame1Wait Local MS MS=MilliSecs() If MS>Frame1Wait Then Frame1Count=(Frame1Count+1) Mod 4 Frame1Wait=MS+500 DrawImage e1_death,typ_1\x,typ_1\y,Frame1Count EndIf typ_1\x=-1000000 typ_1\health=0 EndIf EndIf Next Next End Function ;Funktion Ufo Dies Function e2_dies() For typ.schuss=Each schuss For typ_2.ufo=Each ufo If ImagesCollide(typ\s_type,typ\x,typ\y,0,ufo,typ_2\x,typ_2\y,0) Then typ_2\health=typ_2\health-typ\strength typ\x=-10000 If typ_2\health <=0 Then MS=MilliSecs() If MS>Frame1Wait Then Frame1Count=(Frame1Count+1) Mod 4 Frame1Wait=MS+500 EndIf DrawImage e2_death,typ_1\x,typ_1\y,Frame1Count WaitTimer Timer typ_2\health=0 typ_2\x=-100000 EndIf EndIf Next Next End Function ;Funktion Player Dies Function pl_dies() For typ_1.alien=Each alien For pl.player=Each player If ImagesCollide(shuttle,pl\x,pl\y,0,alien,typ_1\x,typ_1\y,0) Then pl\health=pl\health-50 EndIf Next Next For typ_2.ufo=Each alien For pl.player=Each player If ImagesCollide(shuttle,pl\x,pl\y,0,ufo,typ_2\x,typ_2\y,0) Then player_health=player_health-100 EndIf Next Next If pl\health <=0 Then DrawImage gameover,1280/2,1024/2 Delay 2000 End EndIf End Function Bei diesem Code bekomme ich jetzt nur leider die Meldung "Variable must be a type"... |
||
- Zuletzt bearbeitet von Chrissa am Mi, Dez 30, 2009 0:00, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
"Alien()" geht nicht, weil ein Typ von dir ja schon so heißt. Bleib doch bei AlienSpawn().
Ich habe der letzten post noch etwas angefügt (siehe oben) Vergiß auch nicht alle Variablen, die irgendwo vorkommen, oben im Code jetzt vorerst mit GLOBAL zu definieren. Später können wir das ja noch einmal überdenken. Für das Beispiel der AlienSpawn() wäre das die Variable count_en: Global count_en% Du kannst übrigens hier im Forum den aktuellen Code immer mit EDIT in deinem allerersten Beitrag ersetzen. dann bekommen wir hier keinen Ärger für "häufiges Zitieren". Die zweite Codestelle nimmst Du dann bitte raus. So, ich bin schon gespannt auf Deine neue Version. Noch'n Tipp: Ersetze mal das Graphics... durch Graphics 800,600,32,2 sonst siehst Du ja den Debugger gar nicht. Ist der schon eingeschaltet? |
||
- Zuletzt bearbeitet von Midimaster am Mi, Dez 30, 2009 0:40, insgesamt 2-mal bearbeitet
![]() |
Chrissa |
![]() Antworten mit Zitat ![]() |
---|---|---|
so oben ist jetzt der neue Quelltext drinn... Jedoch immer noch die Meldung Variable must be a type .... Markiert ist die Zeile: Code: [AUSKLAPPEN] DrawImage e2_death,typ_1\x,typ_1\y,Frame1Count
1. Die Types haben neue namen 2. die überflüssigen Zahlen sind weg 3. die Funktionen heißen jetzt so wie du gemeint hast |
||
Gehe zu Seite 1, 2, 3, 4, 5 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group