Viereck bei maus zeichnen [EDIT]NEUEFRAGE[/EDIT]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mas93

Betreff: Viereck bei maus zeichnen [EDIT]NEUEFRAGE[/EDIT]

BeitragSo, Apr 08, 2007 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Ich habe gerade eine denksperre Embarassed

Ich will so wie bei windows beim sachen markieren ein viereck zeichnen.
Nur hab ich irgendwie probleme die x+y end koordinaten auszurechnen.
Weil da kann ich ja nich einfacj mausx+y nehmen sondern muss den abstand zwischen x anfang + ende nehmen, so is das ja mit rect.

Und genau das ist das problem.
Bin gerade irgendwie zu blöd das hinzubekommen

mfg mas93
P.S.: Ich weiss, schieße erklärt^^
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
  • Zuletzt bearbeitet von mas93 am Mo, Apr 09, 2007 19:55, insgesamt einmal bearbeitet
 

ChristianK

BeitragSo, Apr 08, 2007 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist zwar nicht elegant und das Rechteck lässt sich auch nur nach rechts unten ziehen, aber vielleicht löst das deine Denksperre: Wink

Code: [AUSKLAPPEN]
Graphics 640, 480, 32, 2
SetBuffer BackBuffer( )

Local mx, my, tx, ty

While Not KeyHit( 1 )
   Cls
   
   mx = MouseX( )
   my = MouseY( )
   
   If MouseHit( 1 )
      tx = mx
      ty = my
   EndIf
   
   If MouseDown( 1 )
      Rect tx, ty, mx-tx, my-ty
   EndIf

   Flip
Wend

End

Silver_Knee

BeitragSo, Apr 08, 2007 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
1. also bei dem 1. mousehitdie anfangskoordinaten nehmen
2. beim mousedown folgende formel anwenden: abstand=ENDE-JETZT

mas93

BeitragSo, Apr 08, 2007 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
ohh, jetzt is klar
Zitat:

1. also bei dem 1. mousehitdie anfangskoordinaten nehmen
2. beim mousedown folgende formel anwenden: abstand=ENDE-JETZT


so war das.
Und danke für das Beispiel Progamer.coder


mfg mas93

[BIG EDIT]
Code: [AUSKLAPPEN]

AppTitle"Paint Klon"


Type punkt
Field x
Field y
End Type

Type viereck
Field xa ;x anfangs koord
Field ya
Field xe ;x end koord
Field ye
End Type

Global werkzeug=1

Graphics 1024,768,16,1
SetBuffer BackBuffer()

;----------------------------------------------------------------
;<<<<<<<<<<<<<<<<<<<::::::HAUPTSCHLEIFE::::::>>>>>>>>>>>>>>>>>>>>
;----------------------------------------------------------------


Repeat
Cls

If KeyHit(2) Then werkzeug=2

;punkt erstellen
If MouseDown(1) And werkzeug=1 Then
 p.punkt=New punkt
 p\x=MouseX()
 p\y=MouseY()
EndIf


;Viereck erstellen
If MouseDown(1) And werkzeug=2 Then
 v.viereck=New viereck
 v\xa=MouseX()
 v\ya=MouseY()
 
If Not MouseDown(1)Then
 v\xe=MouseX()
 v\ye=MouseY()
EndIf 
EndIf



;die punkte zeichen
LockBuffer BackBuffer()
 For p.punkt= Each punkt
  WritePixelFast p\x,p\y,257550000
 Next
UnlockBuffer BackBuffer()

Color 255,0,0
;viereck zeichnen
For v.viereck=Each viereck

xabstand=v\xa - v\xe
yabstand=v\ya - v\ye

 Rect xa,ya,xabstand,yabstand,1
Next


Flip
Until KeyHit(1)
End


warum fängt das 3-eck immer links oben an??

[/BIG EDIT]
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

ShadowJumper

BeitragMo, Apr 09, 2007 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab ma probiert
bei mir is das nich erst beim 3. sondern von anfang an
und ein gezeichnetes Viereck bleibt (oder ist das beabsihtigt?)

trozdem Danke
(für den Befehl "AppTilte" ^^)

mas93

BeitragDi, Apr 10, 2007 9:35
Antworten mit Zitat
Benutzer-Profile anzeigen
^^ Bitte für den Befehl^^

Aber Ich hab da oben n shit zusammen geschrieben^^
Das sollte nich 3-eck sondern 4-eck heißen^^

Kann mir keiner sagen was ich machen muss, dass das 4 eck nich inks oben anfängt?
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Silver_Knee

BeitragDi, Apr 10, 2007 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
;Viereck erstellen
If MouseDown(1) And werkzeug=2 Then
 v.viereck=New viereck
 v\xa=MouseX()
 v\ya=MouseY()
 
If Not MouseDown(1)Then
 v\xe=MouseX()
 v\ye=MouseY()
EndIf
EndIf

dieser ganze block ergibt für mich keinen sinn:
in der repeatschleife erstellst du ständig neue viereke mit den anfangspunken der maus und da du kein endpunkte hast sind diese bei (0|0)....
dann fragst du erst mousedown(1) ob die maus klickt und in dem selben if nochmal ob sie nicht gedrückt ist dh der user muss während diese variablen zugewiesen werden die taste loslasenum endpunkte zu setzen Question _ Question
besserer Code: [AUSKLAPPEN]
If MouseHit(1) And werkzeug=2 Then
 gezeichnetes.viereck=New viereck
 gezeichnetes\xa=MouseX()
 gezeichnetes\ya=MouseY()
EndIf

If MouseDown(1) Then
 gezeichnetes\xe=MouseX()
 gezeichnetes\ye=MouseY()
EndIf 

So dann sind bei dir ende und anfang vertauscht FORMEL: Abstand=ENDE-ANFANG
bei der korrektur von dem ist mir aufgefallen das bei Rect V\ fehlt und du eine neue variable nimmst die immer null ist darum fängt das rect immer bei 0|0 an

--------EDIT----------
Hier der funktionierende Code: [AUSKLAPPEN]
AppTitle"Paint Klon"


Type punkt
Field x
Field y
End Type

Type viereck
Field xa ;x anfangs koord
Field ya
Field xe ;x end koord
Field ye
End Type

Global werkzeug=1

Graphics 1024,768,16,2
SetBuffer BackBuffer()

;----------------------------------------------------------------
;<<<<<<<<<<<<<<<<<<<::::::HAUPTSCHLEIFE::::::>>>>>>>>>>>>>>>>>>>>
;----------------------------------------------------------------


Repeat
Cls

If KeyHit(2) Then werkzeug=2

;punkt erstellen
If MouseDown(1) And werkzeug=1 Then
 p.punkt=New punkt
 p\x=MouseX()
 p\y=MouseY()
EndIf


;Viereck erstellen
If MouseHit(1) And werkzeug=2 Then
 gezeichnetes.viereck=New viereck
 gezeichnetes\xa=MouseX()
 gezeichnetes\ya=MouseY()
EndIf

If MouseDown(1) And werkzeug=2 Then
 gezeichnetes\xe=MouseX()
 gezeichnetes\ye=MouseY()
EndIf

;die punkte zeichen
LockBuffer BackBuffer()
 For p.punkt= Each punkt
  WritePixelFast p\x,p\y,257550000
 Next
UnlockBuffer BackBuffer()

Color 255,0,0
;viereck zeichnen
For v.viereck=Each viereck

xabstand=v\xe - v\xa
yabstand=v\ye - v\ya

 Rect v\xa,v\ya,xabstand,yabstand,1
Next


Flip
Until KeyHit(1)
End

mas93

BeitragDi, Apr 10, 2007 11:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh, ok
thx
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group