global Types Variablen erkennung?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

dominik

Betreff: global Types Variablen erkennung?

BeitragMi, März 30, 2005 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal zur Übung um die types nen bischen besser zu verstehen was geproggt. Es ist zwar in BB+ geschrieben aber des Problem liegt in einem für alles verständlichen teil.
Und zwar kann man Kästen verschieben in dem man sie mit der linken Maustaste anklickt und mit der rechten die Zielkoordinaten makiert zu dem das Kästenchen verschoben werden soll. Die Koordinaten werden zwar richtig angezeigt nur leider verschieben sich alle kästen grundsätzlich immer auf den Nullpunkt. Daraus lässt sich logischerweise schließen das die Zielkoordianten einfach nie geänder wurden und da ja jede Variable automatisch von Anfang an 0 ist wandern sie eben auch dort hin. Also muss der Fehler irgentwo in der Variablenspeicherung liegen!
Warscheinlich ziemlich simpel aber ich komm eben nicht drauf.


BlitzBasic: [AUSKLAPPEN]
SeedRnd MilliSecs() 
win = CreateWindow(\"Fenster\", 300, 300, 475, 550, Desktop(),1)
Global Maus_koords = CreateLabel(\"Koords:\", 10, 470, 200, 20, win)
Global start_ziel = CreateLabel(\"Start - Ziel\", 10, 490, 400, 20, win)
can = CreateCanvas(10, 10, 448, 448, win)
SetBuffer CanvasBuffer(can)
Global z.raum
Global x
Global y = 1

Type raum
Field x
Field y
Field x_ziel
Field y_ziel
Field rcolor
Field gcolor
Field bcolor
Field auswahl
End Type

Global x_select_start
Global y_select_start
Global x_select_ziel
Global y_select_ziel

neuer_raum(143)

Repeat
wait_event = WaitEvent()
Cls
raum_anzeigen()
Select wait_event
Case $203
mx = EventX()
my = EventY()
Case$202
taste = EventData()
Select taste
Case 1
x_select_start = mx/32
y_select_start = my/32
Case 2
x_select_ziel = mx/32
y_select_ziel = my/32

For z.raum = Each raum
If x_select_start = z\x/32 And y_select_start = z\y/32 Then
z\auswahl = True
z\x_ziel = x_select_ziel
z\y_ziel = y_select_ziel
EndIf
Next

End Select
Case $803
End
End Select

bewegen()

SetGadgetText Maus_koords, \"X: \" + mx/32 + \" Y: \" + my/32
SetGadgetText start_ziel, \"X_Start: \" + x_select_start + \" Y_Start: \" + y_select_start + \" X_Ziel: \" + x_select_ziel + \" Y_Ziel: \" + y_select_ziel
FlipCanvas(can)
Forever
End


Function neuer_raum(anzahl)
For i = 0 To anzahl
z.raum = New raum

If x = 12 Then
x = 1
y = y + 1
Else
x = x + 1
EndIf

;Neue X-Koordinate
z\x = x*32
;Neue Y-Koordinate
z\y = y*32

z\rcolor = Rand(0,255)
z\gColor = Rand(0,255)
z\bColor = Rand(0,255)
Next
End Function

Function raum_anzeigen()
For z.raum = Each raum
Color z\rcolor, z\gcolor, z\bcolor
Rect z\x, z\y, 32, 32
;Koordinaten Ausgeben
Color 255, 255, 255
Text z\x, z\y, z\x/32
Text z\x, z\y+10, z\y/32

If z\auswahl = True Then Text z\x, z\y+20, z\x_ziel + \" \" + z\y_ziel
Next
End Function

Function bewegen() ;<--- In dieser Function müsste der Fehler liegen!
For z.raum = Each raum
If z\auswahl = True Then

If z\y > z\y_ziel Then z\y = z\y - 1
If z\y < z\y_ziel Then z\y = z\y + 1

If z\x > z\x_ziel Then z\x = z\x - 1
If z\x < z\x_ziel Then z\x = z\x + 1

If z\x = z\x_ziel And z\y = z\y_ziel Then
z\auswahl = False
x_ziel = z\x
y_ziel = z\y
EndIf
EndIf
Next
End Function
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.
 

CodeMaster

BeitragDo, März 31, 2005 10:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Bist du sicher, dass sich die Kästchen immer genau auf den Nullpunkt
verschieben? Du teilst die "Mauszielposition" ja immer durch 32, was
bei einer Koordinate von (640|480) gerade mal zu (20|15) führt.
Auf die Schnelle hab ich jetzt keinen Fehler gefunden...
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

dominik

BeitragDo, März 31, 2005 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
nein weiss ich nicht 100% habs nie bis zum ziel verfolgt aber wenn man das ziel rechts unterhalb vom start setzt verschieben sie sich trotzdem immer nach links oben richtung Nullpunkt und das kann schonmal nicht stimmen.
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.
 

CodeMaster

BeitragDo, März 31, 2005 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, laut deinem Code schon. Das Problem ist einfach, dass du
so komische Positionsberechnungen machst, du tust nämlich so als hätte
das Canvas nur 12 Pixel Breite.
Änder mal die Funktion raum_anzeigen() so um, dass du nicht die
Absolutpositionen der "Räume" zeichnest sondern jeweils mit 32
multipliziert, also in etwa "Rect z\x*32, z\y*32, 32, 32". Dann siehst
du, was ich meine.
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

dominik

BeitragDo, März 31, 2005 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahh hab den Fehler! Very Happy

BlitzBasic: [AUSKLAPPEN]
Function bewegen()
For z.raum = Each raum
If z\auswahl = True Then

If z\y > z\y_ziel*32 Then z\y = z\y - 1 ;<--- hier hat nur immer das *32 hinter dem Ziel gefehlt.
If z\y < z\y_ziel*32 Then z\y = z\y + 1

If z\x > z\x_ziel*32 Then z\x = z\x - 1
If z\x < z\x_ziel*32 Then z\x = z\x + 1

If z\x = z\x_ziel And z\y = z\y_ziel Then
z\auswahl = False
x_ziel = z\x
y_ziel = z\y
EndIf
EndIf
Next
End Function
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.
 

CodeMaster

BeitragDo, März 31, 2005 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
So ist's brav Wink
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group