Drag&Drop Spielerei

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

SpionAtom

Betreff: Drag&Drop Spielerei

BeitragMi, Apr 20, 2005 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Razz
 

ke^kx

BeitragMi, Apr 20, 2005 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 20, 2005 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Apr 21, 2005 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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 user posted image

http://www.geocities.com/evilx...erbert.PNG

[mod] Bitte Bilder max 800*600. BladeRunner [/mod]

SpionAtom

BeitragDo, Apr 21, 2005 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 16, 2005 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man das auch mit bildern?
z.b. das man aus ein paar bildern sich ein neues zusammenstellen!

SpionAtom

BeitragDo, Mai 19, 2005 8:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDo, Mai 19, 2005 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir funzt nur beim ersten!
bei weiteren bildern kommt dann ein Fehler!
könntest du mir vielleicht den Code geben?

SpionAtom

BeitragFr, Mai 20, 2005 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 21, 2005 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group