Globale Arrays und sonstige Kleinigkeiten
Übersicht

![]() |
C64-FloBetreff: Globale Arrays und sonstige Kleinigkeiten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo!
Ich habe gestern angefangen mir ein paar BB-Tutorials einzuverleiben und bin nun eifrig am coden eines kleinen rundenbasierten Strategiespiels. Leider bin ich auf ein paar kleine Probleme gestossen, die wohl zu "simpel" sind als dass sie in den tutorials näher erklärt werden: Wie erstelle ich Globale Arrays? mit Code: [AUSKLAPPEN] Dim spieler$(2,2) kann ich zwar ein Array erstellen, aber es nicht in Functions usw benutzen, und
"Dim Global Spieler$(2,2)" etc wirf Fehlermeldungen.... Zum zweiten Zwingt das Programm meinen Rechner in dieser Schleife in die Knie: Code: [AUSKLAPPEN] ;---Fraktionsauswahl---- spieler(1,1)=0 Repeat Cls TileBlock titelbild,0,0 DrawBlock char_perg_l,0,0 If bereit(2)=0 Then titelbild=LoadImage("tl_spielerwahl_neu.bmp") If bereit(2)=1 Then titelbild=LoadImage("tl_spielerwahl_bereit.bmp") Text 60,220,spieler$(1,1) introtext=LoadFont("Arial",32,False,False,False) SetFont introtext Color 0,0,0 Text 60,300,"Fraktion wählen" DrawBlock fraktion1k,50,360 introtext=LoadFont("Arial",16,False,False,False) SetFont introtext Text 60,450,"Untote" DrawBlock fraktion2k,160,360 Text 160,450,"Barbaren" DrawImage maus,MouseX(),MouseY() ;mauszeiger anzeigen Flip If MouseHit(1) And ImageRectCollide(maus, MouseX(), MouseY(), frame, 50, 360, 75, 75)Then spieler(1,1)=1 spieler$(1,2)="Untote" End If If MouseHit(1) And ImageRectCollide(maus, MouseX(), MouseY(), frame, 160, 360, 75, 75)Then spieler(1,1)=2 spieler$(1,2)="Barbaren" End If If MouseHit(1) And ImageRectCollide(maus, MouseX(), MouseY(), frame, 330, 540, 130, 40) Then End ;klick auf ausgangsbutton Until spieler(1,1)>0 ..es läuft zwar, doch ruckelt hier enorm, wieso? ![]() Danke erstmal für Eure Zeit, ich bin bestimmt nicht das letzte mal hier ![]() |
||
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.) |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dim sind immer global, die musst du nicht extra als solche deklarieren. (deswegen kannst du dims auch nicht in Funktionen verwenden)
Und das problem an deiner Schleife ist einer der grundlegenden Anfängerfehler: Du lädst Bilder in der Schleife. Lade die Bilder vor der Schleife und zeichne sie lediglich. Wenn du das Titelbild ändern willst kannst du auch einfach jeweils das andere bild, dass du vorher geladen hast zuweisen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Arrays (von Blitzarrays mal abgesehen) sind generell global.
Grundsätzlich haben Funktionen die ein Load oder Create enthalten (wie LoadImage in Deinem Fall) nichts in einer "unkontrollierten" Schleife wie der Hauptschleife zu suchen. Die Funktionen belegen nämlich Speicherplatz auf der Graka oder im Ram von wo aus Befehle wie DrawImage oder PlaySound etc. sich die dort gespeicherten Informationen beliebig oft holen können ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
moin,
du darfst deine Bilder nicht in der Hauptschleife jedes mal neu laden... ...und die Fonts auch nicht. Code: [AUSKLAPPEN] Graphics 800,600,1 ... Dim titelbild(2) titelbild(0) = LoadImage("tl_spielerwahl_neu.bmp") titelbild(1) = LoadImage("tl_spielerwahl_bereit.bmp") font1 = LoadFont("Arial",32,False,False,False) font2 = LoadFont("Arial",16,False,False,False) Repeat Cls TileBlock titelbild( bereit(2) ) ,0,0 ... SetFont font1 Color 0,0,0 Text 60,300,"Fraktion wählen" ... Flip Until spieler(1,1)>0 mfg Edit: ...zu spät ![]() |
||
![]() |
C64-Flo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die schnelle Hilfe!
![]() ..wenn ich meine arrays nicht einfach so in den functions verwenden kann, muss ich das Problem eben irgendwie umgehen schätze ich ^.^ |
||
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.) |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, das ist ein bisschen übertrieben.
Du kannst DIM Felder nicht in Funktionen das erste mal deklarieren. Das muss vorher im Hauptprogramm schonmal passiert sein (in aller Regel ganz oben am Anfang). Dann kannst du automatisch in den Funktionen auf das DIM Array zu greifen. Und wenn du ein Array nur in einer Funktioin brauchst und es nicht global machen willst, brauchst du blitzarrays. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du kannst arrays in den funktionen verwenden, das ist kein problem.
Du musst sie nur im Hauptprogramm deklarieren. (es gäbe da noch die Variante der Blitz Arrays. Da diese jedoch statisch sind, sind sie normalerweise nicht ganz so nützlich, da sind dann Banks vorzuziehen) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst deine Dims schgon in der funktion benutzen, Du musst sie nur ausserhalb deklarieren ![]() |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group