Hallo,
Ich bin dabei ein recht einfaches iPhone-Spiel zu programmieren und inzwischen schon soweit gekommen, dass ich fast fertig bin. Dennoch ergeben sich noch einige probleme bei denen mir hoffentlich jemand helfen kann:
1. Im Spiel bewegen sich gegner von oben nach unten. Wenn die Gegner den unteren Bildschirmrand erreicht haben, wird ein Leben abgezogen. Soweit klappt das auch. Hier mal ein Code Ausschnitt:
IF gegner.y > 960 AND start=1
leben = leben-1
ENDIF
Jetzt will ich ja aber nicht, dass sich der Gegner weiter nach unten bewegt, sondern das er gelöscht wird, und 1 Leben abgezogen wird. wenn ich jetzt aber ein "delete gegner" dahinterhänge wird das Leben gleich wieder zurückgerechnet. Wie kann ich es erreichen, dass 1 leben abgezogen wird, wenn der gegner 0 erreicht, aber die Anzahl der leben auch erhalten bleibt, wenn der Gegner gelöscht ist?
2. Das hängt mit dem oberen Problem zusammen. Wenn das Leben auf 0 fällt erscheint der Gameover bildschirm. Jetzt will ich aber auch, dass man aus diesem wieder zurückkehren kann. Praktisch wäre hier ein Befehl um die Gegnertypes zu leeren, da es im Moment so ist, dass die gegner praktisch an ort und Stelle bleiben, und so das Spiel nicht gescheit neustartet
So, ich hoffe ihr könnt mir dabei weiterhelfen. :)
Soweit ich das beurteile, denkst Du nur etwas zu umständlich. Wenn der Gegner eine bestimmte y-Position überschreitet, dann lösche ihn und ziehe ein Leben ab, somit ist das in einem Gang erledigt und es dürfte keine Probleme mehr geben.
Zur Frage 2: ich würde es mit REDIM feld[0] machen. Dann sind alle Einträge gelöscht und Du kannst "frisch" beginnen.
Danke, das hat mir weitergeholfen. Manchmal fällt mir die einfachste Lösung nicht ein. ;)
Den redim Befehl kannte ich noch nicht, hört sich aber nach dem an was ich suche. Damit muss ich mal ein bisschen rumexperimentieren.
Alternativ Types anschauen...
Sind eigentlich recht einfach zu verstehen und übersichtlicher als alles mit DIM's zu machen.
Ist ne Frage des geschmacks...
Mal noch eine Frage: Wie sieht es mit halbtransparenz in glbasic aus? Ich kann zwar mit gimp problemlos Halbtransparente Bilder erstellen (gibt hier ja auch ein Tutorial), aber wenn ich die Grafik einfüge, wird der halbtransparente Teil als Schwarz angezeigt. Muss man das vielleicht irgendwo aktivieren?
ALPHAMODE? Press F1 ;)
Cheers
Ich grabe diesen Thread mal wieder aus, da ich erneut nicht weiterkomme. Ich programmiere gerade ein Shoot'em up, bei dem die gegner auf einen schießen sollen. Das geht anfangs auch perfekt, allerdings gibt es das seltsame Problem dass mit der Zeit die Kugeln der Gegner immer langsamer werden, und schließlich sogar langsamer als die Gegner selbst fliegen. Ich kann aber einfach keinen Fehler im Code finden. Hier mal der betreffende Codeschnipsel:
IF gegner.z=30 AND gegner.t<gegner.strength AND gegner.x>30 //gegnerschussfunktion
gegnerschussneu.x=gegner.x+4
gegnerschussneu.y=gegner.y+16
DIMPUSH gegnerschuss[],gegnerschussneu
gegner.z=0
ENDIF
FOREACH laser IN gegnerschuss[]
DEC laser.x,1.1
IF laser.x < -8 THEN DELETE laser
DRAWSPRITE 1,laser.x,laser.y
IF BOXCOLL(laser.x,laser.y,8,8,spielerx,spielery,61,35)
leben=leben-1
DELETE laser
ENDIF
NEXT
Schwer so zu sagen, schreib mir mal ne PM und lade mal bitte dein ganzes Projekt rauf.
Werden die Schüsse aus dem Array rausgenommen, wenn die aus dem Bildschirm fliegen?
ok, danke. Das Problem hat sich gelöst. Jetzt habe ich aber ein größeres Problem, das schon bei 2 meiner projekte aufgetaucht ist. Wenn ich meine Projekte normal kompiliere klappt alles perfekt. Allerdings soll ich, um das Projekt für Android zu kompilieren, die "Platform optionen setzen". Das Problem: Wenn ich bei Projekt -> Optionen auch nur irgendetwas ändere (oder sogar garnichts ändere und nur auf übernehmen klicke), resultiert das darin, das wenn ich das projekt danach testen will nur noch ein schwarzer Bildschirm kommt! Ich kann mir einfach nicht vorstellen dass ich da was falsch gemacht haben soll, da das schon ohne Änderung durch bloßen klick auf übernehmen geschieht. Die einzige Möglichkeit die ich gefunden habe, das Projekt danach wieder zum funktionieren zu bekommen, war den Programm code zu kopieren und in ein neues Projekt einzufügen wo wieder alles perfekt ging (Es sei denn natürlich ich versuche wieder die Optionen zu verändern)
Wenn Du schrwaren Screen hast, zip mal alles zusammen und poste das hier.
Bist du mit dem V10 RC unterwegs?
Wär evtl. noch interessant zu wissen.
hm, ok, ich glaube ich habe den Grund gefunden. Der Projektordner meines Projekts hieß vorher "Wiz shmup 2.app". Scheinbar verändert eine Verändeung der Optionen den Ordner so, dass die Leerzeichen durch _ ersetzt werden. Ich habe also plötzlich einen zweiten Ordner "Wiz_shmup_2.app". Da sind jetzt keine Mediadateien drin, also kommt auch nur ein schwarzes Bild. Genauso werden ' in _ umgewandelt.
QuoteBist du mit dem V10 RC unterwegs?
Wär evtl. noch interessant zu wissen.
Ja, ich habe gerade angefangen v10 zu benutzen.
Ja das mit dem _ ist absicht so, da manche Geräte keine Leerzeichen abkönnen...
Ich versuche gerade ein Programm für Android zu kompilieren, und soweit habe ich da auch schon Fortschritte gemacht. Plötzlich geht nun das Programm aber garnicht mehr, und wenn ich das Spiel aus dem Menü aufrufen will stürtzt es ab, und die Ausgabe *** Unhandled exception ***
EXCEPTION_ACCESS_VIOLATION
erscheint. Das seltsame ist, dass das relativ plötzlich aufgetreten ist, ohne dass ich etwas geändert hätte. Weiß jemand woran das liegen kann? Ich könnte auch mal das gesamte Projekt hochladen.
Kenne ich. Rufen bei mir täglich Leute an: "Ich hab nix geändert, gestern ging's nocht, heute geht nix mehr". Stellt sich dann raus, dass sie an einem anderen PC sitzen oder so...
Spaß beiseite: Mach in den Code to STDOUT Befehle rein und schau wo's genau hängt. Evtl. kommst Du dem Crash dann auf die Spur?
DEBUG an ;)
So, die fehlerhafte Zeile habe ich gefunden. Ich bin mir jedoch immer noch nicht sicher, warum die einen error verursacht hat.
IF klaktiv=1 AND KEY(29) OR GETJOYZ(-9)
IF INIGET$("einsts","sound")=1
PLAYSOUND(2,0,1)
ENDIF
klaktiviert=1
klaktiv=0
ENDIF
Hierbei war offenbar das GETJOYZ(-9) das Problem. Das sollte ursprünglich ein Test für den Accelerometer des iPhone sein. Den habe ich zwar noch nicht ausprobiert, aber vorher hat der Befehl zumindest keinen Fehler erzeugt. Hat sich vielleicht in den neueren Version irgendetwas geändert, sodass das jetzt nicht mehr geht?
EDIT: Wenn ich mir das nochmal durchlese, habe ich glaube ich den Befehl falsch verwendet. War also mein Fehler, sorry.
:) immer schön wenn man den Fehler selber findet!
GETJOYZ(-9) <- also das Gerät Nr. -9. Äh, ich hab hier keine negativen Zahlen abgefangen. Wäre minimaler Speed impact. Ich lass es so, OK?
Super selbst gefunden. So wird man zum Profi.