Seite 3 von 3

Verfasst: 12.10.2006 18:52
von Agent
Moinsen (wenn auch schon abend)

Danke für eure zahlreichen Posts. Ich fand alle gut! ;)
Teilweise ziemlich aufwendig. Je nach dem, zu welchem Zweck.

Für ein einfaches Fenster hätte es auch #null's einfache version mit den 98% getan. PMV's version ist am professionellsten und universellsten.

Ich habe mir alle gespeichert und experimentiere damit gerade. Mal sehen was zum Einsatz kommt bei der ein oder anderen Anwendung.

Vielen Dank!!!

Verfasst: 14.10.2006 15:34
von Macros
Frage, warum ist PMV's version so unsiversel?
das ist meine auch,
und der Code ist kürzer *gekänkt bin* ^^

Hier das ganze nochmal schöner dargestellt:

Code: Alles auswählen

InitSprite()
OpenWindow(1,200,200,310,300,"test")
CreateGadgetList(WindowID(1))
TextGadget(10,0,0,100,30,"New Window X")
TextGadget(11,0,30,100,30,"New Window Y")
StringGadget(1,100,00,100,30,"")
StringGadget(2,100,30,100,30,"")
ButtonGadget(0,200,00,100,60,"Submit")
TextGadget(5,0,60,310,30,"")
Targetx=WindowX(1)
targety=WindowY(1)
OpenWindowedScreen(WindowID(1),0,100,310,200,0,0,0)


Repeat
  For schleife=1 To 20
    event=WindowEvent()
    
    If event=#PB_Event_Gadget
      If EventGadget()=0
        Targetx=Val(GetGadgetText(1))
        targety=Val(GetGadgetText(2))
        move=0
        winkel=0
      EndIf
    EndIf
    
    If event= #PB_Event_CloseWindow
      End
    EndIf
    
  Next
  
  ; der Kern
  If WindowX(1)<>target Or WindowY(1)<>target
    If move=0
      xmove=(Targetx-WindowX(1))/2
      ymove=(targety-WindowY(1))/2
      move=1
      xl=WindowX(1)
      yl=WindowY(1)
    EndIf
  EndIf
  
  
  If move=1
    winkel+1
    Delay(10)
    bogenmass.f=winkel*3.1415926/180
    x.l=xl-Cos(bogenmass)*xmove+xmove
    y.l=yl-Cos(bogenmass)*ymove+ymove
    SetWindowPos_(WindowID(1),#HWND_TOPMOST,x,y,310,300,0);#SWP_NOZORDER)
    If winkel=180
      move=0
      winkel=0
      Targetx=Random(1024-300)
      targety=Random(768-300)
    EndIf
  EndIf
  ; ende des Kerns
  
  
  StartDrawing(ScreenOutput())
  ;Box(0,0,310,200)
  speed.f=Sqr(Pow((x-xold.f),2)*Pow((y-yold.f),2))
  
  If speed>speedmax
    a+1
    If a>1
      speedmax=speed
      SetGadgetText(5,"Maximaler Speed: "+Str(speedmax))
    EndIf
  EndIf
  
  Color=RGB(Abs(Sin(speed/6)*255),Abs(Cos(speed/6)*255),0)
  Circle(x/3,y/3,2,Color)
  StopDrawing()
  FlipBuffers()
  xold=x
  yold=y  
  
Until event=#PB_Event_CloseWindow

Verfasst: 14.10.2006 15:47
von Brügge
mom du möchstet doch eine variable von 100 langsam nach 75 bringen dann schneller werdend nach 50 und wieder langsam werdend nach 25 und stoppend bei 0 oder?

wenn ja ganz einfach!

Code: Alles auswählen

Global bogen.d
bogen = 3.1415926 / 180
For i = 90 To 270 step speed
  x = Sin(i * bogen)*breite /2 + breite /2
  Debug x
Next i

also: breite sind die 100 pixel du kannst jetzt auch 200 nehmen.
speed: desto größer desto schneller. achja du musst eine sehr sehr kleine zahl nehmen ^^


mfg bruegge!

Verfasst: 14.10.2006 15:55
von Agent
hi Brügge.

*hehe*
aber dein Beispiel funzt nicht. auch nicht wenn ich aus speed eine zahl mache (pb4). habe die variablen definiert mit werten, erfolglos.

Verfasst: 14.10.2006 16:00
von Brügge
ohh sorry mein fehler habe es vorher nicht getestet...

so jetzt geht es:

Code: Alles auswählen

Global bogen.d
Global breite.d
Global i.d
Global speed.d
speed = 0.08
breite = 100
bogen = 3.1415926 / 180 
i = 90
Repeat
  i = i + speed
  x = Sin(i * bogen)*breite /2 + breite /2 
  Debug x 
Until i >= 270
mfg bruegge

Verfasst: 14.10.2006 16:00
von Macros
Letzter Test, ob ich nicht doch unsichtbar geworden bin ^^

Agent? hast du meinen Post oben gelesen?

Verfasst: 14.10.2006 17:21
von PMV

Code: Alles auswählen

For i = 90 To 270 step speed
PB kann keine Variablen hinter Step
mach ma drauß ne Konstante :wink:

@Macro
ich hab mir deine Code jetzt ne gewisse Zeit lang angeschaut, wie will
man da die Beschleunigung festlegen? Oder die Bremskraft? Es ist zwar
möglich ... aber dafür ist meine Version wohl etwas besser geeignet :D
Oder versuch mal mit deiner Version die gleichen Kräfte ein zu bauen,
wie ich sie in meinem Beispiel hab: 10 m/s² :wink:
Das einstellen einer maximalen Geschwindigkeit ist auch nicht ohne
weiteres möglich. Dafür fehlen noch ein paar Variablen, sofern das so
überhaupt möglich ist :D

MFG PMV

Verfasst: 14.10.2006 17:25
von Macros
Wenn ich ein Fenster nach Sinus bewegen will,
also schneller werden, und wieder abbremsen,
brauche ich nicht gleich 100 Parameter, lieber klein und schnell ^^

Aber das ist jetzt natürlich meine Meinung.

Ein bisschen an der Gesamtgeschwindigkeit kann man ja drehen,
mach aus "winkel" eine double und erhöhe/senke den Wert,
der dazugezählt wird.