Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 29.04.2012, 21:53 Titel: Auswahl mit Viereck an Mausposition |
|
|
Hi
Ihr kennt mit Sicherheit diese Einheitenauswahl in Strategiespielen, diese Vierecke mit denen man Einheiten auswählen könnt. Ich habe dies versucht, und zwar so:
Code: | If mb=1 Then 'Falls Maus gedrückt wird
tx=mx 'alte Mauskoordinaten speichern
ty=my
Do While mb=1 'Solange Maus gedrückt ist
Getmouse mx, my,, mb 'Neue Mauskoordinaten herausfinden
Screenlock
Cls
Line (tx, ty)-(mx, my), &hFFFFFF,B 'Viereck zeichnen
Screenunlock
Sleep 1
Loop
End If |
Dummerweise klappt das bei mir nicht ganz so wie es soll. Ich sehe das Viereck nicht, während ich die Maus gedrückt halte, sondern erst nachdem ich die Maustaste wieder loslasse. Woran liegt das? Wie kann ich dies beheben? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 29.04.2012, 23:05 Titel: |
|
|
Sollte funktionieren und tut es bei mir auch. Vielleicht mal testweise das SLEEP ein wenig erhöhen?
Sonst kontrolliere mal, ob du auch wirklich innerhalb der Schleife ankommst. Ein bisschen muss man ja außen herum ergänzen. Vielleicht ist da was schief gelaufen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 30.04.2012, 13:27 Titel: |
|
|
Wenn ich das Sleep erhöhe passiert nichts. Hier mal der ganze Code:
Code: | Screenres 640,480,32',,1
Dim Shared As Integer mx,my,mb,tx,ty
Do
Sleep 1
GetMouse mx,my,,mb
Screenlock
Cls
If mb=1 Then
tx=mx
ty=my
Do While mb=1
Getmouse mx, my,, mb
Screenlock
Cls
Line (tx, ty)-(mx, my), &hFFFFFF,B
Screenunlock
Sleep 10
Loop
End If
Screenunlock
Loop Until Inkey=Chr(27)
End |
Wie gesagt, das Rechteck erscheint bei mir erst, wenn ich die Maustaste wieder loslasse.  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 30.04.2012, 15:41 Titel: |
|
|
versuch mal nur eine while-schleife zu benutzen statt zwei zu verschachteln. vielleicht tust du dann keine doppelten screenlocks mehr verteilen ;P _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 30.04.2012, 15:43 Titel: |
|
|
Aber wie krieg ich das mit nur einer Schleife hin? Ich kam leider nur auf diese Möglichkeit, bei der ich leider 2 Schleifen brauche.  |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 30.04.2012, 16:01 Titel: |
|
|
Code: | do
sleep 1
getmouse mx,my,,mb
if mb then
screenlock
cls
line (oldmx, oldmy)-(mx, my), &hffffff,b
screenunlock
else
oldmx=mx
oldmy=my
end if
loop until inkey=chr(27)
|
 |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 30.04.2012, 16:11 Titel: |
|
|
Danke, habe aber auch gerade eine andere Lösung gefunden:
Code: | Do
Sleep 1
GetMouse mx,my,,mb
Screenlock
Cls
'Zeichenbefehle
Screenunlock
If mb=1 Then
tx=mx
ty=my
Do While mb=1
Getmouse mx, my,, mb
Screenlock
Cls
'Zeichenbefehle
Line (tx, ty)-(mx, my), &hFFFFFF,B
Screenunlock
Sleep 10
Loop
End If
Loop Until Inkey=Chr(27)
End
|
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 30.04.2012, 17:12 Titel: |
|
|
spätestens wenn du das ding in irgendeine normale hauptschleife eines programms oder sowas einbauen willst bleibt dir nichts anderes übrig als nur eine while-schleife zu benutzen, ansonsten bleibt die ganze grafische darstellung stecken solang die maus gedrückt ist und die innere while-schleife läuft. Also gewöhn dich besser schonmal dran  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 01.05.2012, 12:52 Titel: |
|
|
Aber wo bringe ich in Muttonheads Code die anderen Zeichenbefehle unter? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 01.05.2012, 23:10 Titel: |
|
|
vor dem if? oder im else-case, je nach dem ob sie immer oder nur während kein kasten gezogen wird passieren sollen. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 02.05.2012, 15:49 Titel: |
|
|
Hab es so gemacht.
Code: | Do
Sleep 1
GetMouse mx,my,,mb
Screenlock
Cls
'Zeichenbefehle
If mb=1 Then
Line (tx,ty)-(mx,my),&hFFFFFF,B
Else
tx=mx
ty=my
End If
Screenunlock
Loop Until Inkey=Chr(27)
End
|
|
|
Nach oben |
|
 |
|