type kollision
Übersicht

TarnumBetreff: type kollision |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich wollte ma mit types was ausprobieren und in mein spiel einbauen.. aber dann kommt da das blöde problem..
Code: [AUSKLAPPEN] For vogel.flieger = Each flieger
If ImagesCollide (kugel,kugel_x,kugel_y,0,vogel, vogel\posx,vogel\posy,vogel\frame) Then Delete vogel EndIf Next und wenn ich das mache kommt immer der fehler : illegal type conversation... Kann mir wer sagen warum das kommt, und wie man sonst ne type-kollision machen kann anderen images? |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Probiers mal mit Code: [AUSKLAPPEN] Delete vogel.flieger Die Variable 'vogel', die du bei ImagesCollide verwendest solltest du auch umbenennen.
|
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das mit delete geht auch nich anders... und wenn ich z.b. schreibe :
Code: [AUSKLAPPEN] kkk = kkk + 1 kollisions_vogel(kkk) = vogel.flieger dann kommt der gleiche fehler mit illegal type conversation |
||
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
an dem obigen beispiel scheint alles ok...zeig mehr code (vor allem die deklaration des types!) | ||
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tarnum hat Folgendes geschrieben: das mit delete geht auch nich anders... und wenn ich z.b. schreibe :
Code: [AUSKLAPPEN] kkk = kkk + 1 kollisions_vogel(kkk) = vogel.flieger dann kommt der gleiche fehler mit illegal type conversation das ist ja auch nicht richtig. eine zuweisung kannst du nur mit einem attribut des types machen, nicht mit der objektvariable... so währe es richtig zum beispiel: Code: [AUSKLAPPEN] kkk = kkk + 1 kollisions_vogel(kkk) = vogel\kollision |
||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
da alles was wichtig sein könnte für den code
Code: [AUSKLAPPEN] Type flieger Field posx Field posy Field frame Field speed Field richtung End Type ;erstellen der vögel per zufall zufalls = Rnd (1,200) If zufalls = 100 Then vogel.flieger = New flieger vogel\posx = 0 vogel\posy = Rnd (1,380) vogel\frame = 0 vogel\speed = Rnd (1,20) / 10 zufalls = 0 EndIf ;mit bewegung versehen For vogel.flieger = Each flieger vogel\posx = vogel\posx + vogel\speed Next End Function For vogel.flieger = Each flieger If ImagesCollide (kugel, kugel_x ,kugel_y,0, vogel,vogel\posx,vogel\posy,vogel\frame) Then Delete vogel.flieger EndIf Next |
||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst als Imagename eine andere Variable als Vogel nehmen, weil das schon dein speicher ist.
mach z.B. Img_Vogel=loadimage("") und dann if imagescollide(Kugel,Kugel_x,Kugel_y,0,Img_Vogel,Vogel\posx,vogel\posy,vogel\frame) then delete vogel Müsste klappen. |
||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh man bin ich blöd ![]() |
||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so jetzt hab ich das nächste problem.. das obere hat sich ja jetzt erledigt.. und zwar : wie krieg ich 2 types zum kollidieren? mit verschachtelten for each schleifen geht das irgendwie nich... code brauch ich glaubich nich..
hierbei kommt illegal type conversation, liegt nich am type definieren oder so, sondern konkret an dieser zeile... Code: [AUSKLAPPEN] For alien.gegner = Each gegner
For schuss.schusstype = Each schusstype If ImagesCollide (schuss,schuss\x,schuss\y,0,alien\image, alien\x,alien\y,alien\frame) Then boom.explosion = New explosion boom\x = alien\x boom\y = alien\y EndIf Next Next |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
an welcher stelle ist der fehler konkret?
Weil so gibts verschiedene Möglichkeiten: -In deinem Programm gibt es bereits etwas das alien oder schuss heisst und nen anderen type hat -eine der fields gibts net aber wenn ich ehrlich bin glaub ich einfach dass du schusselig bist ![]() sollte sicher imagescollide(schuss\image, .... heissen net? ![]() |
||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ups ich glaub du hast recht ![]() |
||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bin jetzt wieder um einiges weiter und das nächste problem, aber diesmal hab ich echt keine ahnung wodran es liegen könnte...
da sagt er mir memory acess violation.. aber nur wenn ich zu schnell die gegner abschiesse... Code: [AUSKLAPPEN] For alien.gegner = Each gegner For schuss.schusstype = Each schusstype If ImagesCollide (shoot,schuss\x,schuss\y,0,alien\image, alien\x,alien\y,alien\frame) Then Delete schuss.schusstype chan1 = PlaySound (bling) alien\leben = alien\leben - 10 If alien\leben < 0 Then boom.explosion = New explosion boom\x = alien\x boom\y = alien\y chan3 = PlaySound (puff) Delete alien EndIf EndIf Next Next |
||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich glaub ich poste mal den ganzen code damit ihr damit was anfangen könnt :
Code: [AUSKLAPPEN] AppTitle "megashuuuter" Graphics 1024,768,32,1 SetBuffer BackBuffer () Global selber = LoadAnimImage ("grafiken\raumschiff.png",35 ,50 ,0,3) MaskImage selber , 255,0,255 Global shoot = LoadImage ("grafiken\plasma.bmp") MaskImage shoot , 255,255,255 Global h_ground = LoadImage ("grafiken\orionnebel.jpg") Global orion = CopyImage ( h_ground) ResizeImage orion , 1024,768 Global explo = LoadAnimImage ("grafiken\explosion1.png",60,60,0,11) MaskImage explo,0,0,0 Global feind1 = LoadAnimImage ("grafiken\gegner2.png",50,40,0,6) MaskImage feind1 , 0,0,0 Global feind2 = LoadAnimImage ("grafiken\gegner4.png",46,60,0,6) MaskImage feind2 ,0,0,0 Global feind3 = LoadAnimImage ("grafiken\gegner1.png",45,61,0,6) MaskImage feind3 ,0,0,0 ;SOUNDS LADEN Global las = LoadSound ("sounds\laser_sh.wav") Global music = LoadSound ("sounds\lied1.mp3") Global puff = LoadSound ("sound\die.wav") Global bling = LoadSound ("sounds\gut.wav") Type boot Field x Field y Field leben Field frame Field staerke End Type schiff.boot = New boot schiff\x = 495 schiff\y = 688 schiff\staerke = 10 Type schusstype Field x Field y Field art End Type Type gegner Field x Field y Field speed Field frame Field image Field leben End Type Type explosion Field x Field y Field zaehler Field frame End Type ;LEVEL 1 Dim i(10) For i(2) = 1 To 3 For i(1) = 1 To 7 alien.gegner = New gegner alien\speed = -2 alien\x = 10 + i(1) * 110 alien\y = 10 + i(2) * 90 If i(2) = 1 Then alien\image = feind1 alien\leben = 20 EndIf If i(2) = 2 Then alien\image = feind2 alien\leben = 30 EndIf If i(2) = 3 Then alien\image = feind3 alien\leben = 40 EndIf Next Next PlayMusic ("sounds\lied1.mp3") Repeat TASTENABFRAGE ;KOLLISIONS ABFRAGEN ;------------------- ;schüsse + gegner For alien.gegner = Each gegner For schuss.schusstype = Each schusstype If ImagesCollide (shoot,schuss\x,schuss\y,0,alien\image, alien\x,alien\y,alien\frame) Then Delete schuss.schusstype chan1 = PlaySound (bling) alien\leben = alien\leben - 10 If alien\leben < 0 Then boom.explosion = New explosion boom\x = alien\x boom\y = alien\y chan3 = PlaySound (puff) Delete alien EndIf EndIf Next Next malframe = malframe + 1 If malframe = 7 Then For alien.gegner = Each gegner If alien\frame = 5 Then alien\frame = 0 alien\frame = alien\frame + 1 Next malframe = 0 EndIf EXPLOSIONSBERECHNUNG MALEN Flip Cls Until KeyHit(1) ;_-_________________________________________________________________________________ ;----------------------------------------------------------------------------------- ;----------------------------------------------------------------------------------- ;----------------------------------------------------------------------------------- ;----------------------------------------------------------------------------------- ;FUNKTION TASTEN Function tastenabfrage () For schiff.boot = Each boot If KeyDown (205) And schiff\x < 980 Then schiff\x = schiff\x + 3 schiff\frame = 2 EndIf If KeyDown (203) And schiff\x > 0 Then schiff\x = schiff\x - 3 schiff\frame = 1 EndIf If KeyDown (208) And schiff\y < 688 Then schiff\y = schiff\y + 3 EndIf If KeyDown (200) And schiff\y > 400 Then schiff\y = schiff\y - 3 EndIf If KeyHit (57) Then chan1 = PlaySound (las) schuss.schusstype = New schusstype schuss\x = schiff\x +5 schuss\y = schiff\y schuss.schusstype = New schusstype schuss\x = schiff\x + 25 schuss\y = schiff\y EndIf Next End Function ;FUNKTION EXPLOSIONSBERECHNEN Function explosionsberechnung() For boom.explosion = Each explosion boom\zaehler = boom\zaehler + 1 If boom\zaehler = 7 Then boom\frame = boom\frame + 1 boom\zaehler = 0 EndIf If boom\frame = 10 Then Delete boom.explosion Next End Function ;FUNKTION MALEN Function malen () ;DrawBlock orion,1,1 For schuss.schusstype = Each schusstype schuss\y = schuss\y - 7 If schuss\y < 800 Then DrawImage shoot, schuss\x , schuss\y Else Delete schuss.schusstype EndIf Next For alien.gegner = Each gegner alien\x = alien\x + alien\speed If alien\x < -300 Then alien\x = 1024 DrawImage alien\image, alien\x , alien\y , alien\frame Next For boom.explosion = Each explosion DrawImage explo, boom\x , boom\y, boom\frame If boom\frame = 10 Then Delete boom.explosion EndIf Next For schiff.boot = Each boot DrawImage selber, schiff\x, schiff\y , schiff\frame schiff\frame = 0 Next End Function |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich hätte da ne bitte: Blitz verfügt über die geniale Fähigkeit einen Debugger zu haben. Wenn man den benutzt, sagt er einem meistens wo der Memory Access V entsteht und man kommt selbst dahinter.
Versuchs bitte erst damit. *es gibt einige sonderausnahmen, da kratzt blitz mit dem debugger und gewissen fehlern gleich total ab, sind aber spezielle sonderfälle* |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Tarnum
RE:memory acess violation Haste mal den DebugModus eingeschaltet ? Delete schuss.schusstype müßte so sein Delete schuss Bei Alien haste das richtig gemacht !? Wenn man alle auf einmal entfernen will so Delete Each schusstype Am besten gewöhnste dir an Types so zu benennen das am Ende noch Type dran hängt wie bei SchussType z.B. Alien.GegnerType Boom.ExplosionType BootType ... |
||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sorry dreamora, da hab ich nichmehr dran gedacht, abers problem ist jetzt gelöst... der fehler war, dass der alien schon gelöscht wurde, aber man noch in der schleife war, wo die kollision zwischen jedem einzelnen schuss und dem alien geprüft wurde, der allerdings gelöscht wurde gerade... habs jetzt n bisschen geändert und funktioniert endlich ![]() danke euch allen, jetzt wo das grundprogrmam steht, hoffe ich nichtmehr so oft hier fragen stellen zu müssen ![]() |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Tarnum
Gelöschte Types in einer For Each Schleife kannste auf =NULL bzw. <>NULL prüfen ... Ist evtl. ganz nützlich wenn man sich zu einem Alien gerade Infos anzeigen lassen will . War so gemeint : Code: [AUSKLAPPEN] Type GegnerType Field x End Type Global Alien.GegnerType =New GegnerType Alien\X=100 Global XAlien.GegnerType XAlien.GegnerType=First GegnerType While Not KeyHit(1) Cls ;töten ... mit delete If XAlien<>Null Then Text 10,10,"X:"+XAlien\X EndIf Wend End |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group