Physik-Fenster

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Physik-Fenster

Beitrag von Konne »

Ist ein lustige Procedure um ein Fenster physikalisch korrekt springen zu lassen (also fast korrekt) :allright:

Code: Alles auswählen


 ;              _________Physik_Fenster___________
  ;            |                                  |
   ;           |Programmierer: Konstantin *****   |
    ;          |Firma:         KoMaNi             |
  ;            |                                  |    
  ;            |--------|Beschreibung|------------|  
     ;         |Ist eine lustige Procedure um ein |
      ;        |Fenster springen zu lassen        |
        ;      |__________________________________|


Procedure PhysikFenster()

Protected Anziehung   ;Gibt die Geschwindigkeit der Anziehung an
Protected Huepfen     ;Gibt die Hüpfkraft an
Protected Abweichung  ;Gibt die Geschwindigkeit der Abweichung an
Protected Abweichung2 ;Gibt die Seitliche Abweichung nach rechts + | links- an
Protected Anziehung2  ;Gibt die Anziehung nach unten + | oben- an
Protected Geschwindigkeit  ;Gibt an wie oft das Fenster verschoben wird
Protected WHoehe      ;Bild Hoehe
Protected WBreite     ;Bildbreite
Protected Breite      ;Breiten koordinaten start punkt
Protected Hoehe       ;Gibt die Hoehe des Fensters aus (zB zum Debugen)
Protected oldticks    ;Counter von Windows
Protected oldHoehe    ;Brechnung der max. Hoehe
Protected AufHoehe    ;Auflösung Hoehe
Protected AufBreite   ;Auflösung Breite
Protected i           ;Zähl Variable
Protected v           ;Zähl Variable 
Protected c           ;Zähl Variable
Protected l           ;Zähl Variable
Protected a           ;Zähl Variable
Protected x           ;Zähl Variable


;______Hier_können_die_einzelnen_Faktoren_geändert_werden___________________________________________

Anziehung      =1   ;Je mehr desto schwächer
Huepfen        =70  ;Je mehr deto höher
Abweichung     =1   ;weniger is mehr


;______Änderungen_hier_können_zu_einem_Ruckeln_führen_______________________________________________
 
Abweichung2    =5   ;5 ist gut, mehr is mehr
Anziehung2     =3   ;3 ist gut
Geschwindigkeit=30  ;Bild refresh zeit



;______Fenstereinstellungen_________________________________________________________________________

WHoehe       =369  ;Hoehe des Bildes
WBreite      =548  ;Breite des Bildes
Breite       =100  ;Je mehr desto weiter rechts

;___________________________________________________________________________________________________




UseJPEGImageDecoder()  ;Um JPGs einbinden zu können

If OpenWindow(1,Breite,0, WBreite , WHoehe   , #PB_Window_Invisible|#PB_Window_BorderLess, "Physik") ;Fenster erstellen
 
       
    
    SkinWin(WindowID(),CatchImage(0,?SkinPicture))    ;Fenster erstellen


    HideWindow(1,0)   ;Fenster anzeigen
EndIf


oldticks=GetTickCount_()   ;Den Windows Tickcount auslesen
i=1           
v=0
oldHoehe=8000          ;NUR zur höhenmessung benötigt



Repeat            ;Hauptschleife öffnen

ExamineDesktops()   ;Die Auflösung auslesen um das Bild dynamisch zur Auflösung springen zu lassen

AufHoehe=DesktopHeight(0)  ;Hoehe ermitteln
AufBreite=DesktopWidth(0)  ;Breite ermitteln




If oldticks + Geschwindigkeit < GetTickCount_() ; wollte kein delay beutzen kann aber dadurch ersetzt werden

oldticks=GetTickCount_()  ;oldticks dem tickcount gleichstellen


If c=Abweichung And l=0       ;Seitliche Abweichung
Breite=Breite+Abweichung2     
c=0
EndIf

If c=Abweichung And l=1
Breite=Breite-Abweichung2
c=0
EndIf

If v<3 
c=c+1
EndIf

If Breite>AufBreite-WBreite
l=1
EndIf

If Breite<0
l=0
EndIf

;________________________________________________________________


If x=Anziehung  ;Berechnet die Anziehung
a=a+Anziehung2
x=0
EndIf

x=x+1


If v=0            ;lässt den Gegenstand fallen
Hoehe=Hoehe+a
EndIf


If  Hoehe=>AufHoehe-30-WHoehe And v=0  ;Wenn es den Boden erreicht...
v=1
a=0
oldHoehe=AufHoehe+800
y=0
EndIf

If v=1                                ;Aufspringen
If Huepfen/i> 1.5
 Hoehe=Hoehe-Huepfen+a+i*2.5+1
 
 If Hoehe>AufHoehe-30-WHoehe
 i=i+1
 a=0
 oldHoehe=AufHoehe+800
 y=0
 EndIf

Else
v=2
EndIf
EndIf


If v=2 And Hoehe>AufHoehe-WHoehe-30     ;wenn es auf dem Boden ist...
v=3 
Hoehe=AufHoehe+60-WHoehe
MoveWindow(Breite, Hoehe) 
Delay(500)
EndIf

If v=3                    ;Bild runterziehen ...
s=s+2
Hoehe=Hoehe+s
Delay(25)
If Hoehe > AufHoehe+200
v=4
a=0
EndIf
EndIf

If v=4                     ;Bild hochspringen lassen...
Hoehe=Hoehe-50
Delay(10)
EndIf

If v=4 And Hoehe<0           ;Wenn es oben ist die ganze sache nomal wiederholen
 i=1
 v=0
 a=0
EndIf

;_________Höchster Punkt ausrechnen (nicht nötig)_____


;Höchsten Punkt ausrechnen

If Hoehe < oldHoehe
 oldHoehe = Hoehe
 
;  If y=1

 EndIf

 ;Höchsten Punkt debugen
 
 If Hoehe > oldhoehe And y=0
  Debug(oldHoehe)  
  y=y+1
 
 EndIf
 

 

;________________________________________________________________-


MoveWindow(Breite, Hoehe)    ;Fenster an die angegebenen Koordinaten bewegen




EndIf
;___________________________________________________________________________________________

ForEver
EndProcedure

physikfenster()   ;Ruft das Programm auf


DataSection
  SkinPicture:
    IncludeBinary "Bilder\bg1.jpg"
EndDataSection

Benutzeravatar
MJP
Beiträge: 72
Registriert: 14.10.2004 18:45
Wohnort: Nähe Frankfurt/Hessen
Kontaktdaten:

Beitrag von MJP »

Hehe des ding is genial :allright:
Is perfekt ums für ein Aboutwindow zu benutze...
Alle Reschtsreib feler sind beabsichticht unn kosten nichs echtra ;-D
Visit ---|> http://www.Komani.de/
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Find es eher merkwürdig o_O. Das Fenster springt noch nicht ganz ruckelfrei (ruckelige bewegungen) und es nutzt die gesamte CPU aus >__<. Vielleicht könntest du es ja nochmal überarbeiten :allright:.
Bild
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Naja jetzt tuts ohne 100% es braucht Auslastung nur noch ca 7%.
Das mit dem Ruckeln geht glaub net weg da Fenster eigendlich net für so was gemacht sind. Wern ihr es aber weg bekommen solltet könnt ihr es ruhig posten. Es ist auch möglich durch das ändern, der Variablen oben ,die Physikalischen Dingsens zu ändern und auch die update Zeit vielleicht kommt bei einer bestimmten einstellung etwas unruckeliges heraus. 8)

Code: Alles auswählen

 
 ;              _________Physik_Fenster___________
  ;            |                                  |
   ;           |Programmierer: Konstantin *****   |
    ;          |Firma:         KoMaNi             |
  ;            |                                  |    
  ;            |--------|Beschreibung|------------|  
     ;         |Ist eine lustige Procedure um ein |
      ;        |Fenster springen zu lassen        |
        ;      |__________________________________|


Procedure PhysikFenster()

Protected Anziehung   ;Gibt die Geschwindigkeit der Anziehung an
Protected Huepfen     ;Gibt die Hüpfkraft an
Protected Abweichung  ;Gibt die Geschwindigkeit der Abweichung an
Protected Abweichung2 ;Gibt die Seitliche Abweichung nach rechts + | links- an
Protected Anziehung2  ;Gibt die Anziehung nach unten + | oben- an
Protected Geschwindigkeit  ;Gibt an wie oft das Fenster verschoben wird
Protected WHoehe      ;Bild Hoehe
Protected WBreite     ;Bildbreite
Protected Breite      ;Breiten koordinaten start punkt
Protected Hoehe       ;Gibt die Hoehe des Fensters aus (zB zum Debugen)
Protected oldHoehe    ;Brechnung der max. Hoehe
Protected AufHoehe    ;Auflösung Hoehe
Protected AufBreite   ;Auflösung Breite
Protected i           ;Zähl Variable
Protected v           ;Zähl Variable 
Protected c           ;Zähl Variable
Protected l           ;Zähl Variable
Protected a           ;Zähl Variable
Protected x           ;Zähl Variable


;______Hier_können_die_einzelnen_Faktoren_geändert_werden___________________________________________

Anziehung      =10   ;Je mehr desto schwächer
Huepfen        =15  ;Je mehr deto höher
Abweichung     =1   ;weniger is mehr


;______Änderungen_hier_können_zu_einem_Ruckeln_führen_______________________________________________
 
Abweichung2    =5   ;5 ist gut, mehr is mehr
Anziehung2     =3   ;3 ist gut
Geschwindigkeit=40  ;Bild refresh zeit



;______Fenstereinstellungen_________________________________________________________________________

WHoehe       =369  ;Hoehe des Bildes
WBreite      =548  ;Breite des Bildes
Breite       =100  ;Je mehr desto weiter rechts

;___________________________________________________________________________________________________




UseJPEGImageDecoder()  ;Um JPGs einbinden zu können

If OpenWindow(1,Breite,0, WBreite , WHoehe   , #PB_Window_Invisible|#PB_Window_BorderLess, "Physik") ;Fenster erstellen
 
       
    
    SkinWin(WindowID(),CatchImage(0,?SkinPicture))    ;Fenster erstellen


    HideWindow(1,0)   ;Fenster anzeigen
EndIf


i=1           
v=0
oldHoehe=8000          ;NUR zur höhenmessung benötigt



Repeat            ;Hauptschleife öffnen

ExamineDesktops()   ;Die Auflösung auslesen um das Bild dynamisch zur Auflösung springen zu lassen

AufHoehe=DesktopHeight(0)  ;Hoehe ermitteln
AufBreite=DesktopWidth(0)  ;Breite ermitteln



Delay(Geschwindigkeit)

oldticks=GetTickCount_()  ;oldticks dem tickcount gleichstellen


If c=Abweichung And l=0       ;Seitliche Abweichung
Breite=Breite+Abweichung2     
c=0
EndIf

If c=Abweichung And l=1
Breite=Breite-Abweichung2
c=0
EndIf

If v<3 
c=c+1
EndIf

If Breite>AufBreite-WBreite
l=1
EndIf

If Breite<0
l=0
EndIf

;________________________________________________________________


If x=Anziehung  ;Berechnet die Anziehung
a=a+Anziehung2
x=0
EndIf

x=x+1


If v=0            ;lässt den Gegenstand fallen
Hoehe=Hoehe+a
EndIf


If  Hoehe=>AufHoehe-30-WHoehe And v=0  ;Wenn es den Boden erreicht...
v=1
a=0
oldHoehe=AufHoehe+800
y=0
EndIf

If v=1                                ;Aufspringen
If Huepfen/i> 1.5
 Hoehe=Hoehe-Huepfen+a+i*2.5+1
 
 If Hoehe>AufHoehe-30-WHoehe
 i=i+1
 a=0
 oldHoehe=AufHoehe+800
 y=0
 EndIf

Else
v=2
EndIf
EndIf


If v=2 And Hoehe>AufHoehe-WHoehe-30     ;wenn es auf dem Boden ist...
v=3 
Hoehe=AufHoehe+60-WHoehe
MoveWindow(Breite, Hoehe) 
Delay(500)
EndIf

If v=3                    ;Bild runterziehen ...
s=s+2
Hoehe=Hoehe+s
Delay(25)
If Hoehe > AufHoehe+200
v=4
a=0
EndIf
EndIf

If v=4                     ;Bild hochspringen lassen...
Hoehe=Hoehe-50
Delay(10)
EndIf

If v=4 And Hoehe<0           ;Wenn es oben ist die ganze sache nomal wiederholen
 i=1
 v=0
 a=0
EndIf

;_________Höchster Punkt ausrechnen (nicht nötig)_____________________________________


;Höchsten Punkt ausrechnen

If Hoehe < oldHoehe
 oldHoehe = Hoehe
 
;  If y=1

 EndIf

 ;Höchsten Punkt debugen
 
 If Hoehe > oldhoehe And y=0
  Debug(oldHoehe)  
  y=y+1
 
EndIf

 

;________________________________________________________________-


MoveWindow(Breite, Hoehe)    ;Fenster an die angegebenen Koordinaten bewegen



;___________________________________________________________________________________________

ForEver
EndProcedure

physikfenster()   ;Ruft das Programm auf


DataSection
  SkinPicture:
    IncludeBinary "Bilder\bg1.jpg"
EndDataSection

Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Beitrag von dige »

Echt witzige Idee!

Häng mal noch eine User-Abbruch Bedingung in die Schleife rein.
Zum Bsp.:

Code: Alles auswählen

    If GetAsyncKeyState_(#VK_ESCAPE) : Break : EndIf
Und die Desktop-Eigenschaften musst Du doch nur einmal abfragen, oder?
Also vors Repeat damit ...

Code: Alles auswählen

  ExamineDesktops()   ;Die Auflösung auslesen um das Bild dynamisch zur Auflösung springen zu lassen
  
  AufHoehe=DesktopHeight(0)  ;Hoehe ermitteln
  AufBreite=DesktopWidth(0)  ;Breite ermitteln
  
  Repeat            ;Hauptschleife öffnen
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Das is nur ein Modell in das jeder dann seine eigenen Gadgets laden kann deshalb habe ich auf so etwas verzichtet...

Was meinst du damit? Soll ich die Abfrage in die Schleife machen?
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Was bitte ist SkinWin? Und vielleicht könntest du erklären was dein Programm macht? Wie groß muss das Bild sein welches included wird? Hier sitzt man ein bisschen auf dem Trockenem... (Und Einrückung im Code wäre wunderbar ;))
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

Skinwin ist aus PureTools von Danilo

als testbild hab ich 320x240 zum testen genommen,sieht richtig gut aus ;)

die grösse dann dort anpassen

Code: Alles auswählen

;______Fenstereinstellungen_________________________________________________________________________ 

WHoehe       =369  ;Hoehe des Bildes 
WBreite      =548  ;Breite des Bildes 
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

So is es is doch ganz leicht... und zu SkinWin gibts Examples... (Damit kann man anstelle von einem Windows standartfenster Bilder einbinden ganz einfach :allright:)
Antworten