Irgendwas will da nicht?
Übersicht

vanHyntenBetreff: Irgendwas will da nicht? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Leute!
Folgendes: Ich habe eine Include Datei wo alle Funktionen drin stehen. Dort auch diese Funktion: Code: [AUSKLAPPEN] ; Überprüfen, welche Würfel gewürfelt werden soll Function checkWuerfel() If ImagesCollide(imgCursor,MouseX(),MouseY(),0,imgW1,302,660,0) = 1 And MouseHit(1) = True Then augenPlayer(1,2) = 0 End If If ImagesCollide(imgCursor,MouseX(),MouseY(),0,imgW2,302,660,0) = 1 And MouseHit(1) = True Then augenPlayer(1,2) = 0 End If End Function (Nicht erzählen dass das langsam ist, das weiß ich selbst.) und diese: Code: [AUSKLAPPEN] ; Diese Funktion würfelt Function wuerfeln() ; Wuerfel 1 wuerfeln If augenPlayer(1,2) = 1 Then augenPlayer(1,1) = Rand(1,6) End If ; Wuerfel 2 wuerfeln If augenPlayer(2,2) = 1 Then augenPlayer(2,1) = Rand(1,6) End If ; Wuerfel 3 wuerfeln If augenPlayer(3,2) = 1 Then augenPlayer(3,1) = Rand(1,6) End If ; Wuerfel 4 wuerfeln If augenPlayer(4,2) = 1 Then augenPlayer(4,1) = Rand(1,6) End If ; Wuerfel 5 wuerfeln If augenPlayer(5,2) = 1 Then augenPlayer(5,1) = Rand(1,6) End If End Function Der Sinn ist klar: Die Funktion die würfelt überprüft erst, ob der Würfel überhaupt gewürfelt werden soll und würfelt dann. Die andere überprüft dann ob der Würfel angeklickt wurde und ändert dann den Wert um ihn zu markieren. Aber wieso klappt das nicht? Also egal ob ich den Würfel anklicke oder nicht, der wird gewürfelt. Variablen alle Global |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hmmm..
ich weiß nicht, ob dir einer antworten wird. Bei dem Nick ! Toni |
||
vanHynten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kannst bloß froh sein dass es keinen IQ Test im Anmeldeformular gab.
Mal ehrlich, auf solche Kommentare kann man verzichten. Wenn du die Lösung nicht kannst antworte doch bitte nicht |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hmm...
Schneit hier neu rein, und reißt gleich so groß die Klappe auf ! Wenn schon sooo einen hohen IQ hast, warum fragst hier überhaupt ? Na siehste ! Immer schön kleine Brötchen backen, Junge ! Toni |
||
vanHynten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das war die berechtigte Reaktion auf deinen blöden Kommentar.
Und nun b2t |
||
![]() |
joKe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hot Bit provoziert gerne Leute wenn ihm was nicht passt ... musste einfach ignorieren ... =)
Zur Lösung hab ich aber grad kein Vorschlag ^^ |
||
Projekt: Pollux Renegades Coop
[Maschine: Intel DualCore2 2x 3Ghz | 4096 DRR2 | GeForce GTX 260 Ultra] |
vanHynten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay ![]() Ist auch nicht ganz so eilig. |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mal sehen, ob ich das richtig verstanden habe. Wenn du deinen Würfel anklickst, wird Variable augenPlayer(1,2) auf Null gesetzt. Und gewürfelt wird nur, wenn die Variable augenPlayer(1,2) = 1 ist. Der gewürfelte Wert wird dann an Variable augenWürfel(1,1) übergeben. Die restlichen Würfel genauso.
Beim Überprüfen, welche Würfel gewürfelt werden sollen, stehen aber nur zwei Images = 2 Würfel(?). So wie ich diese Codeteile deute, dürfte überhaupt kein Würfel gewürfelt werden. Hast du vielleicht vorher irgendwo alle Variablen auf 1 gesetzt? Und wieso "markierst" du die Würfel, die gewürfelt werden sollen mit eine (0 = False) und nicht mit einer "1 = True" |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
in der imagescoll
den wert auf eins setzten nicht auf null und nach dem würfeln wieder auf null sonst würfelt der immer anstatt mousehit mousedown oder mousehit in Variable speichen, da sonst nur die erste Abrage mit mousehit funktioniert |
||
[BB2D | BB3D | BB+]
|
vanHynten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also:
1 = Würfeln 0 = Nicht würfeln Das mit Mousehit versuch ich gleich nochmal. Da sind auch nur zwei Images, weil ich das vorläufig so gemacht hab |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe jetzt selbst mal ein Programm entwickelt, dass einige Würfel anzeigt, die können dann durch anklicken ausgewählt werden und mit Taste W werden die entsprechenden Würfel neu gewürfelt.
Das Programm ist zwar anders aufgebaut, denn es Verwendet Types für die Würfel, aber das Prinzip läßt sich ja auch auf DIMs übertragen. Vielleicht hilft es dir ja weiter. Um dein Programm zum laufen zu bringen, müsste man mal andere Codeteile sehen, vielleicht liegt der Fehler ja da. EDIT: Code noch einmal überarbeitet (20:44 Uhr) Code: [AUSKLAPPEN] Graphics 1024, 768, 16, 1 Dim WürfelSeite(6) SeedRnd MilliSecs() Type Würfel Field Augen, Status End Type ; --- Sechs Würfel erstellen For i = 1 To 6 w.würfel = New würfel w\Augen = Rnd(1,6) w\status = 0 Next ; --- Bilder für 6 Würfelseiten erstellen For i = 1 To 6 WürfelSeite(i) = CreateImage(11,11) SetBuffer ImageBuffer(WürfelSeite(i)) Color 255,255,0 For y = 1 To 10 For x = 1 To 10 Read Pixel If Pixel = 1 Then Plot x,y Next Next ScaleImage WürfelSeite(i), 4, 4 ; Bild vergrößern Next ; --- Mauszeiger erstellen Zeiger = CreateImage(11,11) SetBuffer ImageBuffer(Zeiger) Color 0,255,255 For y = 1 To 10 For x = 1 To 10 Read Pixel If Pixel = 1 Then Plot x,y Next Next ScaleImage Zeiger, 2, 2 ; Bild vergrößern ; --- Button erstellen Button = CreateImage(11,11) SetBuffer ImageBuffer(Button) For y = 1 To 10 For x = 1 To 10 Read Pixel If Pixel = 0 Then Color 100,100,100 If Pixel = 1 Then Color 255,0,0 Plot x,y Next Next ScaleImage Button, 4, 4 SetBuffer BackBuffer() Repeat Cls ; --- Augen aller WÜrfel zählen Augen = 0 For w.würfel = Each würfel augen = augen + w\Augen Next Color 0,255,0 Text 100, 240, "Ausgesuchte Würfel Würfeln" Text 0,10, "ESC = Programmende" Text 0,30, "Würfel durch (kurzes) anklicken auswählen/abwählen" Text 50,180, "Gesamt-Augenzahl: " + Augen DrawImage Button, 50,220 ; Würfel darstellen x = 0 For w.würfel = Each würfel x = x + 50 DrawImage WürfelSeite(w\Augen), x, 100 Text x+20, 150, w\Status Next ; Mauszeiger darstellen DrawImage Zeiger, MouseX(), MouseY() ; Würfel auswählen x = 0 For w.würfel = Each würfel x = x + 50 If ImagesOverlap(Zeiger, MouseX(), MouseY(), WürfelSeite(w\Augen), x, 100) And MouseDown(1) Then If w\Status = 1 Then w\status = 0: Delay 100: Exit If w\status = 0 Then w\status = 1: Delay 100: Exit EndIf Next ; Würfel würfeln (Taste W) If ImagesOverlap(Zeiger, MouseX(), MouseY(), Button, 50, 220) And MouseDown(1) Or KeyDown(17) Then For w.würfel = Each würfel If w\Status = 1 Then w\Augen = Rnd(1,6) Next Delay 200 EndIf Flip Until KeyHit(1) ; --- Bilddaten für die Würfelseiten Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,1,1,0,0,0,1 Data 1,0,0,0,1,1,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,1,1,0,1 Data 1,0,0,0,0,0,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,0,0,0,1 Data 1,0,1,1,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,1,1,0,1 Data 1,0,0,0,0,0,1,1,0,1 Data 1,0,0,0,1,1,0,0,0,1 Data 1,0,0,0,1,1,0,0,0,1 Data 1,0,1,1,0,0,0,0,0,1 Data 1,0,1,1,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,0,0,1,1,0,0,0,1 Data 1,0,0,0,1,1,0,0,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 ; --- Mauszeiger Data 1,1,1,0,0,0,0,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,0,0,0,0,1,1,1 ; --- Button Data 0,0,0,0,0,0,0,0,0,0 Data 0,1,0,0,0,0,0,1,0,0 Data 0,1,0,0,0,0,0,1,0,0 Data 0,1,0,0,0,0,0,1,0,0 Data 0,1,0,0,0,0,0,1,0,0 Data 0,1,0,0,0,0,0,1,0,0 Data 0,1,0,0,1,0,0,1,0,0 Data 0,1,0,1,0,1,0,1,0,0 Data 0,0,1,0,0,0,1,0,0,0 Data 0,0,0,0,0,0,0,0,0,0 |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
vanHynten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für jegliche Hilfe. Nun klappt es auch mit den Würfeln. ![]() Aber nun folgendes: Code: [AUSKLAPPEN] If augenPlayer(1,2) = 1 Then augenPlayer(1,2) = 0 End If If augenPlayer(1,2) = 0 Then augenPlayer(1,2) = 1 End If Wenn auf 1 (neu würfeln) dann wird auf 0 geschaltet. Wenn auf 0 (nicht würfeln) wird auf 1 geschaltet. Macht er aber nicht? |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da mußte ich bei meinem Beispiel auch erstmal überlegen.
Code: [AUSKLAPPEN] If augenPlayer(1,2) = 1 Then augenPlayer(1,2) = 0: goto Weiter If augenPlayer(1,2) = 0 Then augenPlayer(1,2) = 1 .Weiter Die Sprungmarke ist natürlich wichtig, sonst wird im ersten Schritt auf Null gestellt und damit wird die zweite Bedingung erfüllt und wieder zurückgesetzt. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
von 1 auf 0 wechseln und umgekehrt geht auch eleganter:
z.B. augenPlayer(1,2) = Not augenPlayer(1,2) oder augenPlayer(1,2) = 1-augenPlayer(1,2) Und wenn schon mit If, dann bitte mit Else(oder ElseIf) anstelle von Goto Code: [AUSKLAPPEN] If augenPlayer(1,2) = 0 Then augenPlayer(1,2) = 1 else augenPlayer(1,2) = 0 Endif |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, so gehts aber auch super von 1 und 0
Code: [AUSKLAPPEN] augenPlayer(1,2) = augenPlayer(1,2) xor 1
und vedammt kurz |
||
[BB2D | BB3D | BB+]
|
vanHynten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, ich probiere es nacher. Muss nun in die Schule ![]() |
||
vanHynten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm leicht konfus.
Ich hab jetzt folgenden Code: Code: [AUSKLAPPEN] If ImagesCollide(imgCursor,MouseX(),MouseY(),0,imgW1,302,660,0) And MouseDown(1) Then augenPlayer(1,2) = augenPlayer(1,2) Xor 1 End If Leider klappt das nicht 100%. Das heißt ich muss fast in der Mitte klicken, damit das klappt. Warum? |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich denke das es an ImagesCollide liegt, weil die tranparenzfarbe nicht als kollision zählt, das bedeutet das nur gewürfelt wird wenn sich zwei sichtbare Pixel überdecken
besser wäre es wenn du es mit Code: [AUSKLAPPEN] IMAGERECTOVERLAP (Bild, X, Y, StartX, StartY, Breite, Höhe)
;also IMAGERECTOVERLAP (imgW1,302,660,MouseX(),MouseY(),1,1) weil dann nur die Mausspitze zählt |
||
[BB2D | BB3D | BB+]
|
vanHynten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Soweit, so gut:
Code: [AUSKLAPPEN] If ImageRectOverlap (imgW1,302,660,MouseX(),MouseY(),1,1) And MouseDown(1) Then augenPlayer(1,2) = augenPlayer(1,2) Xor 1 End If Dann kann ich das zweimal ohne Probleme machen, aber danach gehts komischerweise nicht mehr? |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
um das rauszufinden, mal
mit stop und debuglog arbeiten und dir die variblen ansehen, da wird der Fehler dann schneller entdeckt! oder mal mehr code posten! acha, dieses Mousedown führt dazu das der Code nicht wie beabsichtigt nur einmal durchlaufen wird sondern so lange wie die die maustaste gedrückt und der mauszeiger über dem Würfel ist! Lösung: am anfang in die Hauptschleife Code: [AUSKLAPPEN] Mausklick = MouseHit(1) oder eine Function einbauen um die Mausdaten abzufragenCode: [AUSKLAPPEN] Function Maus_abfrage()
Mausklick = MouseHit(1) Maus_Pos_X = MouseX() Maus_Pos_Y = MouseY() End Function die dann in der Hauptschleife aufgerufen wird, bei der Function dann noch die Variablen Global machen Code: [AUSKLAPPEN] If ImageRectOverlap (imgW1,302,660,MouseX(),MouseY(),1,1) And Mausklick Then
augenPlayer(1,2) = augenPlayer(1,2) Xor 1 End If |
||
[BB2D | BB3D | BB+]
|
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group