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

![]() |
mas93Betreff: Viereck bei maus zeichnen [EDIT]NEUEFRAGE[/EDIT] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Ich habe gerade eine denksperre ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ist zwar nicht elegant und das Rechteck lässt sich auch nur nach rechts unten ziehen, aber vielleicht löst das deine Denksperre: ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. also bei dem 1. mousehitdie anfangskoordinaten nehmen
2. beim mousedown folgende formel anwenden: abstand=ENDE-JETZT |
||
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
^^ 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ahh, ok
thx |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group