Globale Arrays und sonstige Kleinigkeiten

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

C64-Flo

Betreff: Globale Arrays und sonstige Kleinigkeiten

BeitragFr, Sep 29, 2006 11:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Question


Danke erstmal für Eure Zeit, ich bin bestimmt nicht das letzte mal hier Wink
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.)
 

Dreamora

BeitragFr, Sep 29, 2006 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Sep 29, 2006 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Rone

BeitragFr, Sep 29, 2006 11:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

C64-Flo

BeitragFr, Sep 29, 2006 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die schnelle Hilfe!

Very Happy

..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.)

D2006

Administrator

BeitragFr, Sep 29, 2006 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Sep 29, 2006 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

BladeRunner

Moderator

BeitragFr, Sep 29, 2006 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst deine Dims schgon in der funktion benutzen, Du musst sie nur ausserhalb deklarieren Wink
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group