Type Problem
Übersicht

![]() |
FirstdeathmakerBetreff: Type Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich hab für meinen kleinen Weltraumshooter die Schüsse durch Type´s dargestellt. Das Problem ist nur, wenn ich das Spiel starte und einen Schuss abgebe, sagt der Debugger immer "Objekt does not exist"
und zeigt diese Zeile an: Code: [AUSKLAPPEN] If schuss\tod=1 Delete schuss.geschoss
Ich meine, ist das nicht ein Widerspruch an sich? Er kann die Zeile nur verarbeiten wenn schuss\tod=1 ist, und dazu muss ja schuss\ existieren! Wie kann das Objekt denn dann nicht existieren? Ich hab gerade erst angefangen mit Types, deshalb kenn ich mich damit noch nicht so aus. Ich hab oben im Programm das Typefeld deklariert: Code: [AUSKLAPPEN] Type geschoss
Field xpos# Field ypos# Field xbr# Field ybr# Field art Field schaden# Field tod End Type Die Schüsse werden hiermit erstellt: Code: [AUSKLAPPEN] Function createschusse()
If KeyHit(57) ;ein Schuss wird abgegeben (Leertaste) If player(4,0)=1 Or player(4,0)=3 schuss.geschoss=New geschoss schuss\xpos=player(0,1)+100 schuss\ypos=player(0,0)+41 schuss\art=player(3,1) schuss\xbr=schussgeschw(player(3,1)) schuss\ybr=0 schuss\schaden=player(3,1) If player(4,0)=1 Goto sausg1 EndIf If player(4,0)=2 .sausg2 schuss.geschoss=New geschoss schuss\xpos=player(0,1)+65 schuss\ypos=player(0,0)+28 schuss\art=player(3,1) schuss\xbr=schussgeschw(player(3,1)) schuss\ybr=0 schuss\schaden=player(3,1) schuss.geschoss=New geschoss schuss\xpos=player(0,1)+65 schuss\ypos=player(0,0)+56 schuss\art=player(3,1) schuss\xbr=schussgeschw(player(3,1)) schuss\ybr=0 schuss\schaden=player(3,1) schuss\tod=0 EndIf .sausg1 EndIf End Function Ich kapier einfach nicht was ich falsch gemacht habe! |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaub der Fehler liegt irgendwo hier drin:
Code: [AUSKLAPPEN] Function kollisiongms()
;Gegner mit schüssen kollidieren For schuss.geschoss=Each geschoss For i=0 To gegneranzahl If gegner(i,0,0)=1 Select gegner(i,0,1) Case 1 If ImagesCollide(gegner1i,gegner(i,1,0),gegner(i,1,1),0,schuss1i,schuss\xpos,schuss\ypos,0) gegner(i,3,0)=gegner(i,3,0)-schuss\schaden createexplosion(gegner(i,1,0),schuss\ypos-20,gegner(i,2,0),gegner(i,2,1),1) Delete schuss.geschoss If gegner(i,3,0)<=0 gegner(i,0,0)=0 punkte=punkte+geginfo2(0) createexplosion(gegner(i,1,0),gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),2) EndIf EndIf Case 2 If ImagesCollide(gegner2i,gegner(i,1,0),gegner(i,1,1),0,schuss1i,schuss\xpos,schuss\ypos,0) gegner(i,3,0)=gegner(i,3,0)-schuss\schaden createexplosion(gegner(i,1,0)+10,schuss\ypos,gegner(i,2,0),gegner(i,2,1),1) Delete schuss.geschoss If gegner(i,3,0)<=0 gegner(i,0,0)=0 punkte=punkte+geginfo2(1) createexplosion(gegner(i,1,0),gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),3) createexplosion(gegner(i,1,0)+65,gegner(i,1,1)-32,gegner(i,2,0),gegner(i,2,1),2) createexplosion(gegner(i,1,0)+65,gegner(i,1,1)+35,gegner(i,2,0),gegner(i,2,1),2) EndIf EndIf Case 3 If ImagesCollide(gegner3i,gegner(i,1,0),gegner(i,1,1),0,schuss1i,schuss\xpos,schuss\ypos,0) gegner(i,3,0)=gegner(i,3,0)-schuss\schaden createexplosion(gegner(i,1,0),schuss\ypos-20,gegner(i,2,0),gegner(i,2,1),1) Delete schuss.geschoss If gegner(i,3,0)<=0 gegner(i,0,0)=0 punkte=punkte+geginfo2(2) createexplosion(gegner(i,1,0),gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),2) EndIf EndIf Case 4 If ImagesCollide(gegner4i,gegner(i,1,0),gegner(i,1,1),0,schuss1i,schuss\xpos,schuss\ypos,0) gegner(i,3,0)=gegner(i,3,0)-schuss\schaden createexplosion(gegner(i,1,0),schuss\ypos-20,gegner(i,2,0),gegner(i,2,1),1) Delete schuss.geschoss If gegner(i,3,0)<=0 gegner(i,0,0)=0 punkte=punkte+geginfo2(3) createexplosion(gegner(i,1,0),gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),2) EndIf EndIf Case 5 If ImagesCollide(gegner5i,gegner(i,1,0),gegner(i,1,1),0,schuss1i,schuss\xpos,schuss\ypos,0) gegner(i,3,0)=gegner(i,3,0)-schuss\schaden createexplosion(gegner(i,1,0),schuss\ypos-20,gegner(i,2,0),gegner(i,2,1),1) Delete schuss.geschoss If gegner(i,3,0)<=0 gegner(i,0,0)=0 punkte=punkte+geginfo2(4) createexplosion(gegner(i,1,0),gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),2) EndIf EndIf Case 6 If ImagesCollide(gegner6i,gegner(i,1,0),gegner(i,1,1),0,schuss1i,schuss\xpos,schuss\ypos,0) gegner(i,3,0)=gegner(i,3,0)-schuss\schaden createexplosion(schuss\xpos,schuss\ypos-20,gegner(i,2,0),gegner(i,2,1),1) Delete schuss.geschoss If gegner(i,3,0)<=0 gegner(i,0,0)=0 punkte=punkte+geginfo2(5) createexplosion(gegner(i,1,0),gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),3) createexplosion(gegner(i,1,0)+40,gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),3) createexplosion(gegner(i,1,0)+80,gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),3) createexplosion(gegner(i,1,0)+120,gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),3) createexplosion(gegner(i,1,0)+140,gegner(i,1,1),gegner(i,2,0),gegner(i,2,1),3) EndIf EndIf End Select |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
newkev |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
versuch das mal
Code: [AUSKLAPPEN] For schuss.geschoss = Each geschoss If schuss\tod=1 Delete schuss.geschoss Next |
||
Signatur? Gibts nich^^ |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
steht so auch in meinem Programm. Ich hab immer darauf geachtet dass ich erst eine For-Schleife mit schuss.geschoss = Each geschoss einrichte!
Wobei ich dass auch nicht so ganz verstehe, normalerweise sagt man ja: For i=0 to 5 aber bei diesem Befehl fehlt ja das "to": for schuss.geschoss = Each geschoss |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Firstdeathmaker hat Folgendes geschrieben: Ich meine, ist das nicht ein Widerspruch an sich? Er kann die Zeile nur verarbeiten wenn schuss\tod=1 ist, und dazu muss ja schuss\ existieren! Wie kann das Objekt denn dann nicht existieren? Nein, denn die Fehlermeldung stammt ja grade daher dass das abgefragte objekt nicht existiert. Das ist analog zu dem "image does not exist" wenn das handle auf 0 steht- blos weil der handlename existiert, muß das Image ja nit dasein. Kenn mich zwar mit types nit aus, vermute aber daß entweder schuß\tod oder schuss.geschoß nicht eindeutig definiert sind. Füg doch vor dem ganzen mal ein print schuß\tod :print schuss.geschoß ein und setze die fragliche zeile auf ;REMark- dann siehst du WER den Fehler macht. Zudem möchte ich auf das Typestutorial auf der blitzbase.de verweisen, vielleicht steht da ja was nützliches für dich drin ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
doch, es ist ein Widerspruch:
die if Bedingung kann ja nur erfüllt werden wenn schuss\tod=1 ist. Davor bekomme ich keine Fehlermeldung, die Schleife läuft einfach nur durch. Wenn jetzt aber ein Schuß irgend ein Objekt rammt oder aus dem Bildschirm verschwindet wird der jeweilige Schuß auf schuss\tod=1 gesetzt. Wenn das Programm jetzt an die stelle if schuss\tod=1 kommt wird die Bedingung erfüllt und der dahinterstehende Befehl wird ausgeführt (oder in meinem Beispiel eben nicht ausgeführt). Da aber "schuss\tod" existiert, muss ja auch der Eintrag "schuss" existieren, den man dann mit dem nachfolgenden Befehl löschen möchte. Ich kapier das einfach nicht... |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mal kurz ein anderes kleineres Game geproggt wo ich jetzt den gleichen Fehler drin hab: Wieder verschwinden Types:
Code: [AUSKLAPPEN] ;2.ter Anlauf
Graphics 800,600,32,2 ; Initialisierung/Laden Global playeri,plx,ply,plschuss,srate,meteor1i,meteor2i,meteor3i,schuss1i,punkte,lune,level Type meteor Field tod Field xpos Field ypos Field brx Field bry Field art End Type Type geschoss Field tod Field xpos Field ypos Field brx Field bry End Type playeri=LoadImage(CurrentDir()+"images\Schiff1.bmp") MaskImage playeri,255,0,255 meteor1i=LoadImage(CurrentDir()+"images\meteor1i.bmp") meteor2i=LoadImage(CurrentDir()+"images\meteor2i.bmp") meteor3i=LoadImage(CurrentDir()+"images\meteor3i.bmp") schuss1i=LoadImage(CurrentDir()+"images\schuss1i.bmp") lune=LoadImage(CurrentDir()+"images\lune.jpg") MaskImage meteor1i,255,0,255 MaskImage meteor2i,255,0,255 MaskImage meteor3i,255,0,255 plx=390 ply=560 srate=30 level=1 SetBuffer BackBuffer() ;__________Hauptschleife-------------- Repeat keyask() Cls draw() createschuss() If Rand(0,1) createmeteor(level) meteormove() moveschuss() imagecollideproov() Flip Until KeyHit(1) ;-----------Functionen------------- Function draw() DrawImage lune,0,0 DrawImage playeri,plx,ply For m.meteor=Each meteor Select m.meteor\art Case 1 DrawImage meteor1i,m\posx,m\posy Case 2 DrawImage meteor2i,m\posx,m\posy Case 3 DrawImage meteor3i,m\posx,m\posy End Select Next For schuss.geschoss=Each geschoss DrawImage schuss1i,schuss\xpos,schuss\ypos Next Text 10,10,punkte Text 10,25,level Text 20,25,"Level" If punkte>50 level=2 srate=20 If punkte>100 level=3 srate=15 If punkte>150 level=4 srate=10 If punkte>200 level=5 srate=5 End Function Function keyask() If KeyDown(203) plx=plx-4 If KeyDown(205) plx=plx+4 If KeyDown(57) plschuss=plschuss+1 If KeyHit(57) plschuss=srate End Function Function createschuss() If plschuss=srate schuss.geschoss=New geschoss schuss\tod=0 schuss\posx=plx+23 schuss\posy=ply-6 schuss\bry=2 plschuss=0 EndIf End Function Function moveschuss() For schuss.geschoss=Each geschoss If schuss\tod=1 Delete schuss.geschoss schuss\posy=schuss\posy-schuss\bry If schuss\posy<-10 Delete schuss.geschoss Next End Function Function createmeteor(anzahl) For i2=1 To anzahl m.meteor=New meteor m\posx=Rand(10,790) m\posy=-10 m\art=Rand(1,3) m\bry=Rnd(1,3) Next End Function Function meteormove() For m.meteor=Each meteor If m\tod=1 Delete m.meteor m\posy=m\posy+m\bry If m\posy=>600 m\tod=1 Next End Function Function imagecollideproov() For m.meteor=Each meteor Select m\art Case 1 If ImagesCollide(meteor1i,m\posx,m\posy,0,playeri,plx,ply,0) m\tod=1 Case 2 If ImagesCollide(meteor2i,m\posx,m\posy,0,playeri,plx,ply,0) m\tod=1 Case 3 If ImagesCollide(meteor3i,m\posx,m\posy,0,playeri,plx,ply,0) m\tod=1 End Select For schuss.geschoss=Each schuss Select m\art Case 1 If ImagesCollide(meteor1i,m\posx,m\posy,0,schuss1i,schuss\xpos,schuss\ypos,0) Delete m.meteor punkte=punkte+1 schuss\tod=1 Case 2 If ImagesCollide(meteor2i,m\posx,m\posy,0,schuss1i,schuss\xpos,schuss\ypos,0) Delete m.meteor punkte=punkte+2 schuss\tod=1 Case 3 If ImagesCollide(meteor3i,m\posx,m\posy,0,schuss1i,schuss\xpos,schuss\ypos,0) Delete m.meteor punkte=punkte+3 schuss\tod=1 End Select Next Next End Function |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem ist folgendes, wenn du den Type löscht aber darunter noch ein paar Abfragen über diesen Type hast dann gibts ein Problem weil der Speicher dieses Types in einen Null Bereich zeigt.
Es muss nichmal eine Zuweisung sein, eine If abfrage / prüfung reicht dafür. Ich hab das Problem damals so gelöst : Jedes Object kriegt ein IsDeleted das wird beim Kreieren auf 0 gesetzt und immer da wo du normal dein Delete reinpacken willst schreibst du dann Type\IsDeleted = 1. Dann prüfst du ganz unten vor den Next mit ner neuen If abfrage IF Type\IsDeleted = 1 then Delete Type ![]() Beispiel: type Ship field x,y,z field IsDeleted end type Global Space.Ship Space.Ship = new Ship Space\x = 1 Space\y = 2 Space\z = 3 for Space.Ship = Each Ship ;zeichnen ;abfragen ;ist tot ? if Space\leben <= 0 then Space\IsDeleted = 1 ..... ;Type Trick IF Space\IsDeleted = 1 then Delete Space next |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok, danke, ich werd´s mal probieren... | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich dachte, wenn man einen Typ löscht wird der aus der Liste genommen und kann so durch eine Schleife wie
for name.type=each type nicht mehr aufgerufen werden. Oder wie ist das? Ich hab ja schließlich das Problem, dass ich nicht nur einen Typ verwende, sondern ganz viele in eine Liste hineinpacke. Ich hab das Programm mal so umgeschrieben wie du gesagt hast, klappt aber immer noch nicht. Das mit den Fields hat er zwar jetzt (ich hab noch nen Fehler gefunden, ich hatte nicht xpos sondern posx abgefragt), aber er zeigt einen anderen Fehler an: "Arithmetic operator cannot be applied to custom type objects" Was heisst das? Wie kriegt man so etwas weg? [/code];2.ter Anlauf Graphics 800,600,32,2 ; Initialisierung/Laden Global playeri,plx,ply,plschuss,srate,meteor1i,meteor2i,meteor3i,schuss1i,punkte,lune,level Type meteor Field tod Field xpos Field ypos Field brx Field bry Field art Field deleted End Type Type geschoss Field tod Field xpos Field ypos Field brx Field bry Field deleted End Type Global m.meteor Global schuss.geschoss playeri=LoadImage(CurrentDir()+"images\Schiff1.bmp") MaskImage playeri,255,0,255 meteor1i=LoadImage(CurrentDir()+"images\meteor1i.bmp") meteor2i=LoadImage(CurrentDir()+"images\meteor2i.bmp") meteor3i=LoadImage(CurrentDir()+"images\meteor3i.bmp") schuss1i=LoadImage(CurrentDir()+"images\schuss1i.bmp") lune=LoadImage(CurrentDir()+"images\lune.jpg") MaskImage meteor1i,255,0,255 MaskImage meteor2i,255,0,255 MaskImage meteor3i,255,0,255 plx=390 ply=560 srate=30 level=1 SetBuffer BackBuffer() ;__________Hauptschleife-------------- Repeat keyask() Cls draw createschuss() If Rand(0,1) createmeteor(level) meteormove() moveschuss() imagecollideproov() deletetypes() Flip Until KeyHit(1) ;-----------Functionen------------- Function draw() DrawImage lune,0,0 DrawImage playeri,plx,ply For m.meteor=Each meteor Select m.meteor\art Case 1 DrawImage meteor1i,m\xpos,m\ypos Case 2 DrawImage meteor2i,m\xpos,m\ypos Case 3 DrawImage meteor3i,m\xpos,m\ypos End Select Next For schuss.geschoss=Each geschoss DrawImage schuss1i,schuss\xpos,schuss\ypos Next Text 10,10,punkte Text 10,25,level Text 20,25,"Level" If punkte>50 level=2 srate=20 If punkte>100 level=3 srate=15 If punkte>150 level=4 srate=10 If punkte>200 level=5 srate=5 End Function Function keyask() If KeyDown(203) plx=plx-4 If KeyDown(205) plx=plx+4 If KeyDown(57) plschuss=plschuss+1 If KeyHit(57) plschuss=srate End Function Function createschuss() If plschuss=srate schuss.geschoss=New geschoss schuss\tod=0 schuss\xpos=plx+23 schuss\ypos=ply-6 schuss\bry=2 schuss\deleted=0 plschuss=0 EndIf End Function Function moveschuss() For schuss.geschoss=Each geschoss If schuss\tod=1 schuss\deleted=1 schuss\ypos=schuss\ypos-schuss\bry If schuss\ypos<-10 schuss\deleted=1 Next End Function Function createmeteor(anzahl) For i2=1 To anzahl m.meteor=New meteor m\xpos=Rand(10,790) m\ypos=-10 m\art=Rand(1,3) m\bry=Rnd(1,3) m\Deleted=0 Next End Function Function meteormove() For m.meteor=Each meteor If m\tod=1 m\deleted=1 m\ypos=m\ypos+m\bry If m\ypos=>600 m\tod=1 Next End Function Function imagecollideproov() For m.meteor=Each meteor Select m\art Case 1 If ImagesCollide(meteor1i,m\xpos,m\ypos,0,playeri,plx,ply,0) m\deleted=1 Case 2 If ImagesCollide(meteor2i,m\xpos,m\ypos,0,playeri,plx,ply,0) m\deleted=1 Case 3 If ImagesCollide(meteor3i,m\xpos,m\ypos,0,playeri,plx,ply,0) m\deleted=1 End Select For schuss.geschoss=Each geschoss Select m\art Case 1 If ImagesCollide(meteor1i,m\xpos,m\ypos,0,schuss1i,schuss\xpos,schuss\ypos,0) m\deleted=1 punkte=punkte+1 schuss\deleted=1 Case 2 If ImagesCollide(meteor2i,m\xpos,m\ypos,0,schuss1i,schuss\xpos,schuss\ypos,0) m\deleted=1 punkte=punkte+2 schuss\deleted=1 Case 3 If ImagesCollide(meteor3i,m\xpos,m\ypos,0,schuss1i,schuss\xpos,schuss\ypos,0) m\deleted=1 punkte=punkte+3 schuss\deleted=1 End Select Next Next End Function Function Deletetypes() For m.meteor=Each meteor If m/deleted=1 Delete m.meteor Next For schuss.geschoss=Each geschoss If schuss\deleted=1 Delete schuss.geschoss Next End FunctionCode: [AUSKLAPPEN] |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
newkev |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] ;2.ter Anlauf Graphics 800,600,32,2 ; Initialisierung/Laden Global playeri,plx,ply,plschuss,srate,meteor1i,meteor2i,meteor3i,schuss1i,punkte,lune,level Type meteor Field tod Field xpos Field ypos Field brx Field bry Field art Field deleted End Type m.meteor = New meteor Type geschoss Field tod Field xpos Field ypos Field brx Field bry Field deleted End Type schuss.geschoss= New geschoss versuchs mal so |
||
Signatur? Gibts nich^^ |
- Zuletzt bearbeitet von newkev am Di, Jan 06, 2004 19:09, insgesamt einmal bearbeitet
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hmm... Lad mal die Grafiken hoch, dann kann ich mal testen | ||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm kann sein das du vergessen hast gegen Null zu prüfen, das musst ich aber früher nie machen, naja du hast ja dafür 2 schleifen in 2x funktionen erstellt. Ich habs so gemacht wie in meinem Beispiel... | ||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist, dass ich das ja in einer Schleife laufen lasse. Da kann ich das nicht einfach an´s Ende setzen...
Und noch was: Sind Type´s nicht eh immer Global? Oder muss man sie extra auf Global setzen wenn man sie in Functionen braucht? (Wie du in deinem Beispie) |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
- Zuletzt bearbeitet von Firstdeathmaker am Di, Jan 06, 2004 19:37, insgesamt einmal bearbeitet
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Firstdeathmaker hat Folgendes geschrieben: Code: [AUSKLAPPEN] ;2.ter Anlauf
Graphics 800,600,32,2 ; Initialisierung/Laden Global playeri,plx,ply,plschuss,srate,meteor1i,meteor2i,meteor3i,schuss1i,punkte,lune,level Type meteor Field tod Field xpos Field ypos Field brx Field bry Field art Field deleted End Type Type geschoss Field tod Field xpos Field ypos Field brx Field bry Field deleted End Type Global m.meteor Global schuss.geschoss playeri=LoadImage(CurrentDir()+"images\Schiff1.bmp") MaskImage playeri,255,0,255 meteor1i=LoadImage(CurrentDir()+"images\meteor1i.bmp") meteor2i=LoadImage(CurrentDir()+"images\meteor2i.bmp") meteor3i=LoadImage(CurrentDir()+"images\meteor3i.bmp") schuss1i=LoadImage(CurrentDir()+"images\schuss1i.bmp") lune=LoadImage(CurrentDir()+"images\lune.jpg") MaskImage meteor1i,255,0,255 MaskImage meteor2i,255,0,255 MaskImage meteor3i,255,0,255 plx=390 ply=560 srate=30 level=1 SetBuffer BackBuffer() ;__________Hauptschleife-------------- Repeat keyask() Cls draw createschuss() If Rand(0,1) createmeteor(level) meteormove() moveschuss() imagecollideproov() deletetypes() Flip Until KeyHit(1) ;-----------Functionen------------- Function draw() DrawImage lune,0,0 DrawImage playeri,plx,ply For m.meteor=Each meteor Select m.meteor\art Case 1 DrawImage meteor1i,m\xpos,m\ypos Case 2 DrawImage meteor2i,m\xpos,m\ypos Case 3 DrawImage meteor3i,m\xpos,m\ypos End Select Next For schuss.geschoss=Each geschoss DrawImage schuss1i,schuss\xpos,schuss\ypos Next Text 10,10,punkte Text 10,25,level Text 20,25,"Level" If punkte>50 level=2 srate=20 If punkte>100 level=3 srate=15 If punkte>150 level=4 srate=10 If punkte>200 level=5 srate=5 End Function Function keyask() If KeyDown(203) plx=plx-4 If KeyDown(205) plx=plx+4 If KeyDown(57) plschuss=plschuss+1 If KeyHit(57) plschuss=srate End Function Function createschuss() If plschuss=srate schuss.geschoss=New geschoss schuss\tod=0 schuss\xpos=plx+23 schuss\ypos=ply-6 schuss\bry=2 schuss\deleted=0 plschuss=0 EndIf End Function Function moveschuss() For schuss.geschoss=Each geschoss If schuss\tod=1 schuss\deleted=1 schuss\ypos=schuss\ypos-schuss\bry If schuss\ypos<-10 schuss\deleted=1 Next End Function Function createmeteor(anzahl) For i2=1 To anzahl m.meteor=New meteor m\xpos=Rand(10,790) m\ypos=-10 m\art=Rand(1,3) m\bry=Rnd(1,3) m\Deleted=0 Next End Function Function meteormove() For m.meteor=Each meteor If m\tod=1 m\deleted=1 m\ypos=m\ypos+m\bry If m\ypos=>600 m\tod=1 Next End Function Function imagecollideproov() For m.meteor=Each meteor Select m\art Case 1 If ImagesCollide(meteor1i,m\xpos,m\ypos,0,playeri,plx,ply,0) m\deleted=1 Case 2 If ImagesCollide(meteor2i,m\xpos,m\ypos,0,playeri,plx,ply,0) m\deleted=1 Case 3 If ImagesCollide(meteor3i,m\xpos,m\ypos,0,playeri,plx,ply,0) m\deleted=1 End Select For schuss.geschoss=Each geschoss Select m\art Case 1 If ImagesCollide(meteor1i,m\xpos,m\ypos,0,schuss1i,schuss\xpos,schuss\ypos,0) m\deleted=1 punkte=punkte+1 schuss\deleted=1 Case 2 If ImagesCollide(meteor2i,m\xpos,m\ypos,0,schuss1i,schuss\xpos,schuss\ypos,0) m\deleted=1 punkte=punkte+2 schuss\deleted=1 Case 3 If ImagesCollide(meteor3i,m\xpos,m\ypos,0,schuss1i,schuss\xpos,schuss\ypos,0) m\deleted=1 punkte=punkte+3 schuss\deleted=1 End Select Next Next End Function Function Deletetypes() For m.meteor=Each meteor If m\deleted=1 Delete m.meteor Next For schuss.geschoss=Each geschoss If schuss\deleted=1 Delete schuss.geschoss Next End Function dieser code sollte laufen! du hast nur in deiner deletetypes()-funktion einen "/" statt "\" geschrieben, welcher natürlich für eine division steht, und somit besagten fehler produziert... |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok, der 1. Code funktioniert. Jetzt muss ich nochmal den anderen überprüfen... | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, es funktioniert alles! Vielen Dank an alle die mir geholfen haben! | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Gandalf13 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
viel zu kopliziert ![]() versuc mal mit arrys 8) viel spaß ![]() |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
was sind arrys? (Bin immer auf der suche nach neuen Sachen...) | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ Gandalf:
Son quatsch, bei Types muss man Aufpassen und sich an Richtlinien halten aber schwer sind sie nicht. Ausserdem warum soll ich beim Start gleich 1 MB Ram reservieren, wenn ich später gar nich so viel hab ? (extrem beispiel) Ausserdem kann es bei Dims vorkommen das du zu wenig reserviert hast. @ death: Ich wusste doch meine gute alte Methode hilft dir ![]() Übrigens kannst du dann Dead löschen, kannst ja IsDeleted statt Dead verwenden ![]() // Edit Dim Test(100) Ist ein Array, geht auch mit Types, Dim Bla.TTest(100) dann musst du aber für jeden Eintrag bei Bla (0 - 99) ein Bla(x) = new TTest machen sonst hast du ein Speicherfehler ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group