If Variable wird nicht gespeichert
Übersicht

SevenBetreff: If Variable wird nicht gespeichert |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tag,
Ich wollte ein kleines Programm schreiben, nur scheitert das ganze an einer Stelle. Mein Problem ist, dass ich eine If Abfrage gestartet habe. Das Ergebnis wird aber zurück- gesetzt, sobald die If Abfrage nicht mehr erfüllt wird. Wie änder ich das? |
||
Animator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
könntest du den Codeteil mal posten? Ich kann mir so nicht vorstellen wie du das meinst =) | ||
Seven |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ach ja, klar^^
Code: Function Scroll(X, Y, Width = 400, Height = 2) ; Position, Breite und Höhe werden festgelegt Rect X,Y,Width,Height ; Erste Line wird erstellt X2 = MouseX() Y2 = MouseY() Cursor = CreateImage(3,3) DrawImage(Cursor,X2,Y2) ; Bild beim Cursor erstellt clicked = MouseDown(1) S = ImageRectOverlap(Cursor,X2,Y2,X,Y-Width/20,Width,Width/20*2+Height) If S=1 And clicked=1 Then X=X2-((Width)/2+X-Width/40)+X K = K + 1 ; Klick und Position werden ; als Bedingung gestellt. Davon abhängig wird die Position des 2. Rechtecks geändert. Rect (Width)/2+X-Width/40,Y-Width/20,Width/40,Width/20*2+Height ;2. Rechteck wird gezeichnet Text 10,50, K ; Ist lediglich eine Gedanken Hilfe für mich gewesen. Es geht nur um das 2. Rechteck End Function Das ist der Abschnitt. |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich denke mal es liegt daran, dass der Wert X in der Funktion geändert wird, aber nicht via RETURN zurückgegeben wird. Dadurch hat X beim nächsten Aufruf wieder den alten Wert. Du müssest um das zu testen X GLOBAL machen und testweise gar nicht an die Funktion übergeben.... | ||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Seven |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Scheint zu stimmen. Ich habe deinen Vorschlag für "K" übernommen, zurückgegeben
und habe es außerhalb der Funktion schreiben lassen. K erhöht sich in dem Fall. Jetzt weiß ich endlich woran es liegt^^ Leider ist die Umsetzung bei X etwas anders. Immerhin wird das 2. Rechteck innerhalb der Funktion gezeichnet und dafür ist X wichtig. EDIT: Ich habe es mir jetzt einfach gemacht und X1 als global festgelegt und etwas geändert: Code: Function Scroll(Y, Width = 400, Height = 2) Rect X,Y,Width,Height X2 = MouseX() Y2 = MouseY() Cursor = CreateImage(3,3) DrawImage(Cursor,X2,Y2) clicked = MouseDown(1) S = ImageRectOverlap(Cursor,X2,Y2,X,Y-Width/20,Width,Width/20*2+Height) If S=1 And clicked=1 Then X1=X2-((Width)/2+X-Width/40)+X K = K + 1 Rect (Width)/2+X1-Width/40,Y-Width/20,Width/40,Width/20*2+Height Return X1 Es kommt aber auf das selbe hinaus. Das dürfte doch eigentlich nicht passieren-.- Immerhin kann X in dem Fall gleichbleiben (was es ja auch tut: X = 0 ) und die Position des 2. Rechtecks wird nur von MouseX() bestimmt. |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich verstehe ehrlich gesagt den Sinn der Variable Cursor nicht. Außerdem wären Variablendeklarationen mittels Local![]() Du musst natürlich darauf achten, dass die Variable Y2 nun außerhalb der Funktion aktualisiert werden muss. Außerdem sehe ich keinen Grund, verschiedene Variablen X und X1 zu verwenden (Vor allem, da es kein Y1 gibt). Zitat: Code:
If S=1 And clicked=1 Then X1=X2-...
Rect (Width)/2+X1-... Return X1 Unbekannte Variablen haben in BB immer einen Standartwert, der bei Int ![]() Wieso heißt die Variable S eigentlich S? collision fände ich besser benannt. ZEVS |
||
Seven |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay, das mit Local werde ich übernehmen. Ich wollte eigentlich damit anfangen, sobald das
Projekt weiter wächst, aber es macht jetzt wohl schon Sinn. Y2 aktualisiert? Ich hab es zur Sicherheit (und weil mir momentan die Ideen ausgehen^^) Y2 zum global gemacht und sie außerhalb der Funktion mit MouseY() gleichgesetzt. Meinst du das? X1 hab ich erschaffen, weil ich eine von X weitgehend unabhängige Variable wollte, da von X die Liene, bzw. das erste Rechteck abhängt und im Falle eines globalen X mit verschoben werden würde. (hab ich bereits ausprobiert) S entstand aus Eile. Aber gut, ich werde das ganze mal übersichtlicher gestalten. EDIT: Zu Cursor: Ich erstelle ein (eigentlich nicht existierendes) Bild und übernehme es mit Cursor. Danach wird das Bild gezeichnet und zwar genau dort, wo der Cursor ist (bzw. die Maus. Die Variable Cursor ist ja nicht der Cursor selbst, sondern nur das Bild, dass ich erschaffen habe). Das Bild benutze ich um dann abzufragen, ob eine Kollision zwischen dem Bild und einer Fläche besteht. Das hab ich, bevor ich die Kollision benutzt habe, noch etwas umständlicher gelöst. EDIT2: Es geht:D Bzw. beinahe. Ich weiß jetzt woran es lag. Ich hatte noch eine andere Funktion, in der ich die Variablen verwendet habe. Ich sollte wirklich übersichtlicher arbeiten^^ Danke für den Tipp. Ich habe alles entfernt was nicht dazu gehört. X1 habe ich unter Global gesetzt (X1 ist nötig). Return ist nicht nötig und ich darf X und alle anderen Variablen vorher bestimmen. So sieht das aus: Code: timer = CreateTimer (60) Graphics 1024,756,32,2 SetBuffer BackBuffer() Global X1 Function Scroll(X,Y,Width = 400, Height=2) Rect X,Y,Width,Height X2 = MouseX() Y2 = MouseY() Cursor = CreateImage(3,3) DrawImage(Cursor,X2,Y2) clicked = MouseDown(1) Collision = ImageRectOverlap(Cursor,X2,Y2,X,Y-Width/20,Width,Width/20*2+Height) If Collision = 1 And clicked = 1 Then X1=X2-((Width)/2+X-Width/40)+X Rect (Width)/2+X1-Width/40,Y-Width/20,Width/40,Width/20*2+Height End Function While Not KeyDown(1) Cls Scroll(100,100,300,3) WaitTimer Timer Flip 0 Wend Muss noch die Mitte benutzten und die andere Funktion abändern, aber ansonsten geht es. Danke für eure Hilfe:) |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group