Variable type mismatch
Übersicht

![]() |
Lord AdZBetreff: Variable type mismatch |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
momentan versuche ich, einen Space-Shooter Klon zu entwickeln. Das Ganze ist als Lernprojekt gedacht ![]() Bis jetzt komme ich auch schon halbwegs gut voran, nur die Schuss-funktion will nicht funktionieren. Dazu habe ich es mit einem Type und einer For/next Schleife versucht, aber wenn ich starte kommt der Error "Variable type mismatch". Was bedeutet das bzw wie kann ich ihn beheben? Ich habe auch schon dieses Tutorial gelesen, aber den Teil über Types nicht kapiert. Code: [AUSKLAPPEN] ; Auflösung 800X600
Const b = 800 Const h = 600 ; Steuerung Const leer = 57 Const rechts = 205 Const links = 203 Const esc = 1 ; Grafiken Global spieler1 Global spieler2 Global kugel Global hintergrund Global kugelgegner ; Rest Global xsp1 = b/2 Global ysp1 = h - 10 Global xkugel# Global ykugel# Global geschwindigkeit=5 Global beweglichkeit Global Schuss ;--- Types Type s Field x Field y End Type ClsColor 255,0,0 ;--- Hauptschleife Graphics b,h,32,1 SetBuffer BackBuffer() Grafikenladen() Repeat DrawImage hintergrund,0,0 beweglichkeit=geschwindigkeit DrawImage spieler1,xsp1,ysp1 DrawImage spieler2,b/2, 10 ; Steuerung If KeyDown(links) Then xsp1=xsp1-beweglichkeit If KeyDown(rechts) Then xsp1=xsp1+beweglichkeit ; Schuss If KeyHit(leer) Schuss.s = New s Schuss.s\x = xsp1 Schuss.s\y = ysp1 EndIf For Schuss = Each Schuss Schuss\y = Schuss\y-3 DrawImage kugel, Schuss\x, Schuss\y If Schuss\y < 1 Then Delete Schuss Next Flip Until KeyHit(esc) End |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaub der fehler liegt hier.
Code: [AUSKLAPPEN] ; Schuss If KeyHit(leer) Schuss.s = New s Schuss.s\x = xsp1 Schuss.s\y = ysp1 EndIf das .s muss weg wenn du die eigenschaften(felder) des types ansprichst. so müsste es stimmen Code: [AUSKLAPPEN] ; Schuss If KeyHit(leer) Schuss.s = New s Schuss\x = xsp1 Schuss\y = ysp1 EndIf ~Edit~ zu "Variable type mismatch". Nunja ich weis es nicht 100%ig aber ich würde behaupten, dass er damit meint, das eine variable in einem type nicht passt, bzw. so nicht "behandelt" werden darf. Guck mal hier da gibt es auch einige type tuts von usern in diesem forum. Unteranderem auch eines indem es nur um die schussfunktion mit types geht. https://www.blitzforum.de/forum/viewforum.php?f=6 mfg Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
Lord AdZ |
![]() Antworten mit Zitat ![]() |
---|---|---|
leider ist der Fehler immer noch da und Blitz meint, das er sich in dieser Zeile befindet:
Code: [AUSKLAPPEN] ; Schuss
If KeyHit(leer) Schuss.s = New s ; <----- hier Schuss\x = xsp1 Schuss\y = ysp1 EndIf |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm also diese zeile ist richtig.. nimm mal das "global schuss" weg
Anmerkung: Types sind immer Global wenn das immer noch nicht geht, dan vergleich das mal mit dem hier Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Global counter Type shot Field sx Field sy End Type Repeat Cls do_laser() Flip Until KeyHit(1) Function do_laser() ;erstellen If KeyDown(57) Then counter = counter +1 If counter >= 10 Then counter = 0 info.shot = New shot info\sx = 400 info\sy = 600 End If End If ;updaten For info.shot = Each shot info\sy = info\sy - 3 Rect info\sx,info\sy,10,10,1 Next End Function Sry aber ich bin schneller, wenn ich des hier neu schreib, als dass ich mich durch deinen code kämpf ![]() mfg Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ganz allgemein zur meldung: "Variable type mismatch" das kommt immer dann zu stande wenn man irgendwo Vorher die variable als etwas anderes dargestellt hat.
Bei dir Macht genau das das "Global Schuss", denn da hinter schuss nix steht und das das erste vorkommen von Schuss ist, nimmt BB an du machst n integer. Später in deinem Programm sagst du aber dann Schuss.s = New s du definierst hier schuss also als träger von dem Type s. Blitz steht nun vor diesen 2 Aussagen die sich widersprechen -> ERROR Lösung: Global Schuss.s damit definiest du schon am anfang Schuss als Träger von s. Im späteren verlauf dafst du nun .s weglassen. |
||
![]() |
Lord AdZ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dottakopf hat Folgendes geschrieben: Sry aber ich bin schneller, wenn ich des hier neu schreib, als dass ich mich durch deinen code kämpf ![]() mfg Dottakopf ist ja auch besser so, da man sonst zu copy'n'paste neigen würde ![]() Dank deiner Hilfe geht es jetzt auch bis auf das löschen des Schusses. der Code (hab ihn an deinen Lösungsvorschlag angepasst) : Code: [AUSKLAPPEN] ; Auflösung 800X600 Const b = 800 Const h = 600 ; Steuerung Const leer = 57 Const rechts = 205 Const links = 203 Const esc = 1 ; Grafiken Global spieler1 Global spieler2 Global kugel Global hintergrund Global kugelgegner ; Rest Global xsp1 = b/2 Global ysp1 = h - 10 Global xkugel# Global ykugel# Global geschwindigkeit=5 Global beweglichkeit ;--- Types Type shot Field sx Field sy End Type ClsColor 255,0,0 ;--- Hauptschleife Graphics b,h,32,1 SetBuffer BackBuffer() Grafikenladen() Repeat Cls Schuss() DrawImage hintergrund,0,0 beweglichkeit=geschwindigkeit DrawImage spieler1,xsp1,ysp1 DrawImage spieler2,b/2, 10 ; Steuerung If KeyDown(links) Then xsp1=xsp1-beweglichkeit If KeyDown(rechts) Then xsp1=xsp1+beweglichkeit ; Schuss For info.shot = Each shot info\sy = info\sy - 10 DrawImage kugel, info\sx, info\sy If sy < 1 Then delete shot ; <----------------------------------------------- hier liegt der Fehler "Can't delete a non-NewType" Next Flip Until KeyHit(esc) End [...] Function Schuss() If KeyHit(leer) info.shot = New shot info\sx = xsp1 info\sy = ysp1 EndIf End Function @ Silver Knee: Danke für die Erklärung EDIT: Hab das Problem gefunden, mit Code: [AUSKLAPPEN] If info\sy < 1 Then Delete info.shot gehts
nochmal allen danke ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group