Seite 1 von 3
°GELÖST° "Die folgende Variable hat eine Structure: 'WT
Verfasst: 27.02.2009 17:18
von Mok
Servus!
Ich hab mein Aimer-Projekt wiederaufgenommen, und gleich ein wenig ausgebaut: Man kann nun am Anfang zwischen 3 Waffen wählen (Glock [Glock 19], ak74 [AK-74], Pump [Pumpgun])
Ich dachte mir zur einfacheren Handhabung mach ich da ne Structure, wo das ganze Klump gepeichert wird:
Code: Alles auswählen
WType.s = ""
ShotsLeft = Magazine
;-STRUKTUREN
Structure Weapons
Magazine.b
ShootSound.s
DrySound.s
MuniSprite.s
TickShot.b
TickDry.b
TickReload.b
EndStructure
Global ak74.Weapons, pump.Weapons, glock.Weapons
;PUMPGUN SETTINGS
Pump\Magazine = 8
ShotsLeft = Pump\Magazine
Pump\TickShot = 10
Pump\TickDry = 2
Pump\TickReload = 17
;AK74 SETTINGS
AK74\Magazine = 30
ShotsLeft = AK74\Magazine
AK74\TickShot = 2
AK74\TickDry = 3
AK74\TickReload = 23
;GLOCK 19 SETTINGS
Glock\Magazine = 30
ShotsLeft = Glock\Magazine
Glock\TickShot = 7
Glock\TickDry = 3
Glock\TickReload = 10
Der Name der Waffe (siehe oben, also z. B. "glock" oder "pump") wird in dem String WType.s gespeichert (deshalb String, weil ich Dateien lade wie "pump_shot.wav" und somit WType$+"_shot" beutzen kann). Wenn ich aber nachher z. B. den TickDry von der Waffe WType auslesen will und
schreibe bekomme ich den Fehler.
Warum?
MfG, Mok
Edit

Verfasst: 27.02.2009 17:28
von ts-soft
WType$ und WType.s sind unterschiedliche Variablen und haben beide
keine Strukture
Die Fehlermeldung ist aber ein bissel doof

Verfasst: 27.02.2009 17:33
von Mok
ts-soft hat geschrieben:WType$ und WType.s sind unterschiedliche Variablen und haben beide
keine Strukture
Aber Variable1$ und Variable1.s ist doch in PB dasselbe (beides String, oder nich
Außerdem: Warum sollte(n) die ne Struct haben? Sie wurde(n) doch vorher schon (ausserhalb der Struct) deklariert
Verfasst: 27.02.2009 17:39
von Andesdaf
Mok hat geschrieben:Aber Variable1$ und Variable1.s ist doch in PB dasselbe (beides String, oder nich

Nein. Variable$ ist immer mit Dollar und hat mit Variable1.s nichts zu tun.
Verfasst: 27.02.2009 17:45
von DarkDragon
Zur Verdeutlichung:
Es sind 2 Variablen (Beide String) nur werden sie unterschiedlich gehandhabt.
Und man kann nicht einfach
Code: Alles auswählen
Structure STRUKTUR
a.l
EndStructure
Global test.STRUKTUR
Blah$ = "test"
Debug Blah$\a
Machen, da die Namen ja nach dem kompillieren garnichtmehr existieren.
Verfasst: 27.02.2009 18:18
von Kaeru Gaman
die zweite Hälfte von Didis Post ist die eigentliche Antwort.
man kann einen String nicht als Variablennamen verwenden.
dass Bla$ und Bla.s zwei verschiedene Variablen sind, ist natürlich auch so.
der erste Name hat vier Zeichen, der Zweite nur drei, also wie könnten die identisch sein?
für solche strukturierten objekte musst du Arrays oder Listen anlegen:
Code: Alles auswählen
;-STRUKTUREN
Structure Weapons
Name.s
Magazine.b
ShootSound.s
DrySound.s
MuniSprite.s
TickShot.b
TickDry.b
TickReload.b
EndStructure
Global Dim Guns.Weapons(2)
;PUMPGUN SETTINGS
Guns(0)\Name = "Pumpgun"
Guns(0)\Magazine = 8
Guns(0)\TickShot = 10
Guns(0)\TickDry = 2
Guns(0)\TickReload = 17
;AK74 SETTINGS
Guns(1)\Name = "AK74"
Guns(1)\Magazine = 30
Guns(1)\TickShot = 2
Guns(1)\TickDry = 3
Guns(1)\TickReload = 23
;GLOCK 19 SETTINGS
Guns(2)\Name = "Glock 19"
Guns(2)\Magazine = 30
Guns(2)\TickShot = 7
Guns(2)\TickDry = 3
Guns(2)\TickReload = 10
und es bringt nichts, ShotsLeft= bei der initialisierung der Waffentypen einzusetzen.
das muss in die Routine wo er die Waffen wechselt, bzw. wo er nachlädt.
Verfasst: 27.02.2009 18:28
von Mok
Kaeru Gaman hat geschrieben:
das muss in die Routine wo er die Waffen wechselt, bzw. wo er nachlädt.
Die Waffe kann man nur ganz am Anfang auswählen
Edit
was muss ich jetzt mit 'Name' machen? Soll ich alle WTypes durch Name.s\XXX ersetzen?
Verfasst: 27.02.2009 18:40
von Kaeru Gaman
Mok hat geschrieben:Edit
was muss ich jetzt mit 'Name' machen? Soll ich alle WTypes durch Name.s\XXX ersetzen?
guck in meinen code!
name.s\XXX GEHT NICHT!
Kaeru Gaman hat geschrieben:man kann einen String nicht als Variablennamen verwenden.
> Die Waffe kann man nur ganz am Anfang auswählen
na und?
aber nachladen kann man doch?
also muss dein
ShotsLeft = Guns( ChosenWeapon )\Magazine
in deine Nachladeroutine
Verfasst: 27.02.2009 21:37
von Mok
Ich würde ja gerne probieren, ob's geht, aber bei ExamineKeyboard() und ExamineMouse() haut's mich immer raus (reimt sich sogar

)
Hier ein Snippet:
cont ist kurz für continue, was ich nicht benutzen konnte, da es ein Schlüsselwort ist:
Code: Alles auswählen
While cont = 0
If ExamineKeyboard() = 0 Or ExamineMouse() = 0 ;Eines der Beiden oder beides ist NULL (warum?)
CloseScreen()
MessageRequester("Info","Fehler!",0)
End
EndIf
MouseX = MouseX() : MouseY = MouseY()
DisplayTransparentSprite(1,0,0);
DisplayTransparentSprite(2,500,200);
DisplayTransparentSprite(3,800,400);
DisplayTransparentSprite(012,MouseX(),MouseY());
If MouseButton(#PB_MouseButton_Left)
WType.s = "ak74"
ChosenGun = 0
cont = 1
EndIf
If MouseButton(#PB_MouseButton_Right)
WType.s = "glock"
ChosenGun = 2
cont = 1
EndIf
If MouseButton(#PB_MouseButton_Middle)
WType.s = "pump"
ChosenGun = 1
cont = 1
EndIf
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(fontID)
DrawText(5,20,Str(coll),RGB(255,255,255))
DrawText(5,5,"ESC - Beenden" )
StopDrawing()
FlipBuffers()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
Wend
Edit
Ja, ich habe zuvor InitSprite() und OpenScreen() aufgerufen
Verfasst: 27.02.2009 21:46
von Kaeru Gaman
> If ExamineKeyboard() = 0 Or ExamineMouse() = 0
hier brauchst du keinen Rückgabewert prüfen.
du brauchst nur beide inits benutzen.
prüfen tust du dann die Rückgabewerte der Auswertungsfunktionen...
und wenn du die rückgaben von MouseX() und MouseY() schon zwischenspeicherst,
solltest du im Display auch die Variablen und nicht die Funktionen verwenden.
und wenn du das Cont Flag innerhalb der Schleife setzt,
solltest du es am ende der schleife abfragen nicht am anfang,
also Repeat:Until verwenden.