Irgendwas will da nicht?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

vanHynten

Betreff: Irgendwas will da nicht?

BeitragDi, Jan 20, 2004 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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-BIT

Gast

BeitragDi, Jan 20, 2004 17:53
Antworten mit Zitat
Hmmm..

ich weiß nicht, ob dir einer antworten wird.

Bei dem Nick !

Toni
 

vanHynten

BeitragDi, Jan 20, 2004 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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-BIT

Gast

BeitragDi, Jan 20, 2004 18:20
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

BeitragDi, Jan 20, 2004 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war die berechtigte Reaktion auf deinen blöden Kommentar.

Und nun b2t

joKe

BeitragDi, Jan 20, 2004 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 20, 2004 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay Wink

Ist auch nicht ganz so eilig.

Travis

BeitragDi, Jan 20, 2004 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Jan 20, 2004 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 20, 2004 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 20, 2004 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 20, 2004 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für jegliche Hilfe. Nun klappt es auch mit den Würfeln. Wink

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

BeitragDi, Jan 20, 2004 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 20, 2004 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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)

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Jan 21, 2004 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jan 21, 2004 8:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, ich probiere es nacher. Muss nun in die Schule Confused
 

vanHynten

BeitragMi, Jan 21, 2004 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Jan 21, 2004 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jan 21, 2004 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Jan 21, 2004 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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+]

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group