Drag&Drop Spielerei
Übersicht

![]() |
SpionAtomBetreff: Drag&Drop Spielerei |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bestimmt habt Ihr euch gefreagt, was ich sonst so mache:
Ich schreibe Beispielprogramme!!! 8) Hier das Programm Code: [AUSKLAPPEN] ;Beispiel von SpionAtom 20.4.2005 ;Standardzeugs am Anfang Const xr = 800, yr = 600 Graphics xr, yr, 16, 2 SetBuffer BackBuffer() AppTitle("Drag&Drop (nur ohne Drop)- Beispiel von SpionAtom") Global mouse_x, mouse_y ;Das Fenster bestehen aus... Type fenster Field x ;..X-Position Field y ;..Y-Position Field w ;..Breite (Width) Field h ;..Höhe (Height) Field n ;..und Typ (ich habe 3 Typen) End Type Global f.fenster ;Ich erschaffe einige neue Fenster f.fenster = New fenster f\x = 100 f\y = 200 f\w = 50 f\h = 20 f\n = 0 f.fenster = New fenster f\x = 200 f\y = 200 f\w = 200 f\h = 200 f\n = 1 f.fenster = New fenster f\x = 50 f\y = 500 f\w = 100 f\h = 80 f\n = 2 For i = 1 To 10 f.fenster = New fenster f\x = 600 - i * 12 f\y = 100 + i * 20 f\w = i * 30 f\h = 10 f\n = 0 If i <= 5 Then f.fenster = New fenster f\x = 500 + i * 10 f\y = 500 f\w = 8 f\h = 80 f\n = 1 End If Next ;****************************************************************** dragStart = False Repeat ;Mauskoordinaten aktualisieren mouse_x = MouseX() mouse_y = MouseY() ;Prüfen, ob ein Dragvorgang gestartet wird If (MouseDown(1)) And (Not dragStart) Then For f = Each fenster If mouseInRect(f\x, f\y, f\x + f\w, f\y + f\h) Then af.fenster = f dragStart = True oldmx = mouse_x oldmy = mouse_y oldfx = f\x oldfy = f\y End If Next End If ;Das entsprechende Fenster Draggen und Droppen If dragStart Then af\x = oldfx - oldmx + mouse_x af\y = oldfy - oldmy + mouse_y If Not MouseDown(1) Then dragStart = False End If ;Alles zeichnen Cls drawAllFenster() Flip() Until KeyDown(1) End ;****************************************************************** ;Diese Funktion zeichnet alle Fenster in der Reihenfolge, in der sie in der Type-Liste stehen (also in der ;Reihenfolge, in der sie erschaffen sind) Function drawAllFenster() For f = Each fenster drawFenster f\x, f\y, f\w, f\h, f\n Next End Function ;Diese Funktion malt ein Fenster. Sie benötigt Position(x,y), Ausmaße(w,h) sowie den Typ(n) Function drawFenster(x, y, w, h, n = 0) Select n Case 1: Color 0, 255, 0 Rect x, y, w, h, 1 Color 255, 0, 0 Rect x + 2, y + 2, w - 4, h - 4, 1 Color 255, 255, 255 Rect x, y, w, h, 0 Rect x + 2, y + 2, w - 4, h - 4, 0 Case 2 Color 255, 255, 0 Rect x, y, w, h, 1 Color 0, 255, 255 Oval x, y, w, h, 1 Color 255, 255, 255 Rect x, y, w, h, 0 Oval x, y, w, h, 0 Default: Color 255, 0, 255 Rect x, y, w, h, 1 Color 255, 255, 255 Rect x, y, w, h, 0 End Select End Function ;Diese Funktion prüft, ob die Maus sich innerhalb des angegebenen Rechtecks befindet und liefert ;entsprechend true oder false zurück Function mouseInRect (x1, y1, x2, y2) If mouse_x < x1 Then Return False If mouse_x > x2 Then Return False If mouse_y < y1 Then Return False If mouse_y > y2 Then Return False Return True End Function Und ich habe es sogar geschafft einen Roboter aus den Rechtecken zu machen . Schade, wenn ich Webspace hätte wrde ich es euch zeigen. ![]() |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ist ein ganz netter GUI-Ansatz, vielleicht kannst du daraus nochmal was machen. Allerdings sollte immer das ausgewählte Fenster im Vordergrund stehen.
Jirki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab das Programm geschrieben, weil einer im Forum Probleme mit seiner GUI hatte. Das hast du schon richtig erkannt.
Allerdings habe ich gerade nicht die Lust darauf, das hier weiterzuentwickeln. Wer's braucht, der kann es sich ja zu eigen machen. |
||
![]() |
Horst der Biber |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Und ich habe es sogar geschafft einen Roboter aus den Rechtecken zu machen . Schade, wenn ich Webspace hätte wrde ich es euch zeigen.
hab uch ma n roboter gebaut ich nenn ihn herbert ![]() http://www.geocities.com/evilx...erbert.PNG [mod] Bitte Bilder max 800*600. BladeRunner [/mod] |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nichts gegen deinen Roboter, aber meiner sah besser aus. Ich werd mal schauen, dass ichs hochladen kann. Und außerdem war meiner nicht so offensichtlich männlich. hehe... | ||
Snaq |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kann man das auch mit bildern?
z.b. das man aus ein paar bildern sich ein neues zusammenstellen! |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Snaq Meisnt du , dass statt der der Fenster bestimmte Bilder angezeigt werden?
Klar! Im Fenster-Type verwendest du f\n einfach als BildID (die du ja mit LoadImage gaz normal lädst). Und die drawFensterroutine muss ein bißchen angepasst werden. Probier's aus, wenn du's nicht schaffst, frag nach. |
||
Snaq |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bei mir funzt nur beim ersten!
bei weiteren bildern kommt dann ein Fehler! könntest du mir vielleicht den Code geben? |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Pfade der Bilder müssen natürlich noch angepasst werden. Bei mir funzt das so. Die DrawFenster-Function ist überflüssig geworden. Die Attribute w und h vom Type Fenster beinahe auch. aber egal.. Bitteschön
Code: [AUSKLAPPEN] ;Beispiel von SpionAtom 20.5.2005 ;Standardzeugs am Anfang Const xr = 800, yr = 600 Graphics xr, yr, 16, 2 SetBuffer BackBuffer() AppTitle("Drag&Drop (nur ohne Drop)- Beispiel von SpionAtom") Global mouse_x, mouse_y ;Das Fenster bestehen aus... Type fenster Field x ;..X-Position Field y ;..Y-Position Field w ;..Breite (Width) Field h ;..Höhe (Height) Field n ;..und Typ (ich habe 3 Typen) End Type Global f.fenster ;Ich erschaffe einige neue Fenster f.fenster = New fenster f\n = LoadImage("b1.bmp") f\x = 100 f\y = 100 f\w = ImageWidth(f\n) f\h = ImageHeight(f\n) f.fenster = New fenster f\n = LoadImage("b2.bmp") f\x = 300 f\y = 100 f\w = ImageWidth(f\n) f\h = ImageHeight(f\n) f.fenster = New fenster f\n = LoadImage("b3.bmp") f\x = 50 f\y = 500 f\w = ImageWidth(f\n) f\h = ImageHeight(f\n) ;****************************************************************** dragStart = False Repeat ;Mauskoordinaten aktualisieren mouse_x = MouseX() mouse_y = MouseY() ;Prüfen, ob ein Dragvorgang gestartet wird If (MouseDown(1)) And (Not dragStart) Then For f = Each fenster If mouseInRect(f\x, f\y, f\x + f\w, f\y + f\h) Then af.fenster = f dragStart = True oldmx = mouse_x oldmy = mouse_y oldfx = f\x oldfy = f\y End If Next End If ;Das entsprechende Fenster Draggen und Droppen If dragStart Then af\x = oldfx - oldmx + mouse_x af\y = oldfy - oldmy + mouse_y If Not MouseDown(1) Then dragStart = False End If ;Alles zeichnen Cls drawAllFenster() Flip() Until KeyDown(1) End ;****************************************************************** ;Diese Funktion zeichnet alle Fenster in der Reihenfolge, in der sie in der Type-Liste stehen (also in der ;Reihenfolge, in der sie erschaffen sind) Function drawAllFenster() For f = Each fenster DrawImage f\n, f\x, f\y Print f\n Next End Function ;Diese Funktion prüft, ob die Maus sich innerhalb des angegebenen Rechtecks befindet und liefert ;entsprechend true oder false zurück Function mouseInRect (x1, y1, x2, y2) If mouse_x < x1 Then Return False If mouse_x > x2 Then Return False If mouse_y < y1 Then Return False If mouse_y > y2 Then Return False Return True End Function |
||
Snaq |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für die Hilfe SpionAtom!
Brauche das nämlich für mein 3D-Rollenspiel (für das Inventar). also txh for all! cu snaq |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group