Dim Array nicht in einer Funktion aufrufbar?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Cykid

Betreff: Dim Array nicht in einer Funktion aufrufbar?

BeitragDo, Jan 15, 2015 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebe Community Smile

Ich möchte in meinem Spiel die typische GTA2 Steuerung einbauen.
Die Problematik ist:
Ich habe das Bild des Spielers in einem Dim Array geladen, das Problem ist das sobald ich meine playerDraw() Funktion aufrufe, wird mir mitgeteilt das dass Bild nicht existiert.

Wenn ich während des Ladevorgangs stichprobenartig Zeichne, kann ich jedoch ohne Probleme drauf zugreifen.

Im Anhang ist der Code auf alles relevante gekürzt, könnt Ihr mir vlt. sagen wo mein Fehler liegt?

Ein Dim ist ja immer Global, warum kann die Funktion aber nicht auf den Inhalt zugreifen?

main.bb
BlitzBasic: [AUSKLAPPEN]
;Main Settings;

Global screenWidth = 1920
Global screenHeight = 1080
Global Colorweight = 32
Global VideoMode = 2

Global Level$ = "1"
Global modulPath$ = "/module/"
Global imagePath$ ="/img"


;module
Include "module/player/player.bb"

;levelfiles
Include "module/level/1/main.bb"


Graphics screenWidth,screenHeight,Colorweight,VideoMode
SetBuffer BackBuffer()


;Load the Levelmodule
Repeat

level1()

Forever

End


main.bb des Levelmodules
BlitzBasic: [AUSKLAPPEN]
;Init

Function level1()

Repeat
Cls

playerLogic()

playerDraw()

Flip

Until KeyHit(1)


End Function



und das Player modul
BlitzBasic: [AUSKLAPPEN]
;grafik einladen
Dim playerImage(359)
TFormFilter 0

For wimkel# = 0 To 359
playerImage(winkel#) = LoadImage("img/player/char.png")
MidHandle playerImage(winkel#)
RotateImage playerImage(winkel#),winkel#
Next

;Position
Global playerX# = screenWidth*0.5
Global playerY# = screenWidth*0.5
Global playerWinkel# = 0
Global playerSpeed# = 0.3

Function playerLogic()
mx = MouseX()
my = MouseY()

;Winkel der Mausanpassen
playerWinkel# = ((ATan2((y#-my),(x#-mx)) + 360) Mod 360)
If winkel# > 359 Then winkel# = 0
If winkel# < 0 Then winkel# = 359
End Function

Function playerDraw()
DrawImage playerImage(playerWinkel#),playerX#,playerY#
End Function


Vielen Dank für eure Hilfe Smile

Sir Gauss der III

Betreff: Re: Dim Array nicht in einer Funktion aufrufbar?

BeitragDo, Jan 15, 2015 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Cykid hat Folgendes geschrieben:
Hallo liebe Community Smile

BlitzBasic: [AUSKLAPPEN]
;grafik einladen
Dim playerImage(359)
TFormFilter 0

For wimkel# = 0 To 359
playerImage(winkel#) = LoadImage("img/player/char.png")
MidHandle playerImage(winkel#)
RotateImage playerImage(winkel#),winkel#
Next



Hi,
Du haste einen Tippfehler in der Ladeschleife. es wird die Var "wimkel" hochgezählt, genutzt aber Var "winkel"
(D.H. du überschreibst immer playerImage(0) mit einem neuen Bild)
Solche Fehler am besten mit Debuglog suchen (Z.B. ob die Variable auch wirklich hochzählt)

Eingeproggt

BeitragDo, Jan 15, 2015 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Sir Gauss war schneller, denke auch dass es daran liegt.
Und falls es das Programm noch gibt und falls es heutzutage noch läuft, empfehle ich IDEal als Programm-Editor. Der hebt undeklarierte Variablen (Variablen in denen man sich vertippt hat) im Strict Modus hervor und man sieht solche Fehler auf Anhieb Wink

mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Cykid

BeitragDo, Jan 15, 2015 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist allerdings peinlich :O

Das Problem besteht jedoch weiterhin.

Xeres

Moderator

BeitragDo, Jan 15, 2015 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
playerWinkel# = ((ATan2((y#-my),(x#-mx)) + 360) Mod 360)
If winkel# > 359 Then winkel# = 0
If winkel# < 0 Then winkel# = 359

Die zwei Bedingungen sind redundant, da nach ATan2 der Winkel garantiert Positiv (+360) und garantiert kleiner als 360 (modulo) ist.

BlitzBasic: [AUSKLAPPEN]
playerImage(playerWinkel#)

Das wird BB hoffentlich immer richtig casten - aber vielleicht liegt da dein Problem.
Ich würde gleich Ganzzahlen benutzen, was anderes macht bei Array-indizies keinen Sinn.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Cykid

BeitragFr, Jan 16, 2015 0:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Selbst wenn ich fix "5" eintrage bekomme ich die Meldung...komische kiste

Xeres

Moderator

BeitragFr, Jan 16, 2015 0:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Es kann natürlich immer noch sein, dass das Bild nicht unter dem Pfad zu finden ist - wenn "bekannte dateiendungen ausblenden" aktiviert ist und es "char.png.png" heißt zum Beispiel.
Ist die Variable nach dem laden des Bilds noch gleich 0?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Cykid

BeitragFr, Jan 16, 2015 2:12
Antworten mit Zitat
Benutzer-Profile anzeigen
var > 0 beim ausgeben via Print

Holzchopf

Meisterpacker

BeitragFr, Jan 16, 2015 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst Graphics aufrufen, bevor du irgendwelche Bilder lädst. Denn bei BlitzBasic gehen dabei sämtliche geladenen Grafiken verloren. Die Bild-Handles werden dabei übrigens nicht auf 0 gesetzt, weshalb ein Print playerImage(5) durchaus einen Wert > 0 ausgeben kann, sich an dieser Adresse aber dennoch kein Bild befinden muss.

MfG
Holzchopf

Edit
Ah und übrigens: Du hast zwei Hauptschleifen verschachtelt. Das ist unschön und wird dir Probleme bereiten.

Cykid

BeitragSa, Jan 17, 2015 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau das hab ich grade ausprobiert und es hat funktioniert ^^

Vielen vielen Dank!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group