Verfasst: 19.07.2005 10:20
				
				Hallo !
Und was passiert, wenn ich keine Wheel-Maus habe ?
MfG
Wolf Benrath
			Und was passiert, wenn ich keine Wheel-Maus habe ?
MfG
Wolf Benrath
Code: Alles auswählen
InitSprite()
InitKeyboard()
InitMouse()
#kcount = 6 ; Anzahl der Knotenpunkte des Seils/Gummibandes
brems.f = 2.5 ; je niedriger desto strammer
dampf.f = 1.5 ; je mehr desto stärker wird gedämpgt
kgrav.f = 0.1 ; gravitationswirkung auf das Seil
Procedure.f Angle(p1x.f, p1y.f,p2x.f,p2y.f)
  tsx.f = p1x - p2x
  tsy.f = p1y - p2y
  
  If tsx = 0 And tsy = 0
    ProcedureReturn 0
  Else
    
    ang.f = ATan(tsy/tsx)
    
    If p1x < p2x
      ang + #PI
    EndIf 
    ProcedureReturn ang
  EndIf
EndProcedure
Procedure.f Radius(p1x.f,p1y.f,p2x.f,p2y.f)
  ProcedureReturn Sqr(Pow(p1x-p2x,2)+Pow(p1y-p2y,2))
EndProcedure
OpenWindow(0,0,0,185,30,"RTS-Auflösung",#PB_Window_ScreenCentered| #PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
    ComboBoxGadget(0,5,5,120,200)
      AddGadgetItem(0,-1,"800x600")
      AddGadgetItem(0,-1,"1024x768")
      AddGadgetItem(0,-1,"1280x768")
      AddGadgetItem(0,-1,"1280x800")
      AddGadgetItem(0,-1,"1280x1024")
      SetGadgetState(0,2)
    ButtonGadget(1,130,5,50,20,"OK")
    
    
    Dim kx.f(#kcount)
    Dim ky.f(#kcount)
    Dim kxm.f(#kcount)
    Dim kym.f(#kcount)    
    
Repeat
  wevent.l = WaitWindowEvent()
  
  Select wevent
  
    Case #PB_Event_CloseWindow
      End
      
    Case #PB_Event_Gadget
    
      If EventGadget() = 1
        res.b = GetGadgetState(0)      
        CloseWindow(0)
        Break
      EndIf
      
  EndSelect
ForEver
Global screenw.l, screenh.l
Select res
  Case 0
    screenw = 800
    screenh = 600
    
  Case 1
    screenw = 1024
    screenh = 768
    
  Case 2
    screenw = 1280
    screenh = 768
  Case 3
    screenw = 1280
    screenh = 800
    
  Case 4
    screenw = 1280
    screenh = 1024
EndSelect
OpenScreen(screenw, screenh,32,"RTS-Test")
Global mx.f, my.f, mspeed.f
mx = screenw/2
my = screenh/2
mspeed = 1
Global bx.f, by.f, bxm.f , bym.f, brad.f,ratio.f
brad = 22
bx = screenw/2
by = screenh/2
bxm = 0
ratio = 0.001
Repeat
  ExamineKeyboard()
  ExamineMouse()
  mx = MouseX()
  my = MouseY()
  
  krad1.f = Radius(mx,my,kx(0),ky(0))
  krad2.f = Radius(kx(1),ky(1),kx(0),ky(0))
  
  
  kangle1.f = Angle(mx,my,kx(0),ky(0))
  kangle2.f = Angle(kx(1),ky(1),kx(0),ky(0))
  
  
  kxm(0) = (kxm(0) + Cos(kangle1)*krad1/brems+ Cos(kangle2)*krad2/brems)/dampf
  kym(0) = (kym(0) + Sin(kangle1)*krad1/brems+ Sin(kangle2)*krad2/brems)/dampf + kgrav
  
  
  kx(0) = kx(0) + kxm(0)
  ky(0) = ky(0) + kym(0)
  For n = 1 To #kcount-1
  
  
  krad1 = Radius(kx(n-1),ky(n-1),kx(n),ky(n))
  krad2 = Radius(kx(n+1),ky(n+1),kx(n),ky(n))
  
  
  kangle1 = Angle(kx(n-1),ky(n-1),kx(n),ky(n))
  kangle2 = Angle(kx(n+1),ky(n+1),kx(n),ky(n))
  
  
  kxm(n) = (kxm(n) + Cos(kangle1)*krad1/brems+ Cos(kangle2)*krad2/brems)/dampf
  kym(n) = (kym(n) + Sin(kangle1)*krad1/brems+ Sin(kangle2)*krad2/brems)/dampf + kgrav
  
  
  kx(n) = kx(n) + kxm(n)
  ky(n) = ky(n) + kym(n)
  
  
  Next
  
  
  krad1 = Radius(kx(#kcount-1),ky(#kcount-1),kx(#kcount),ky(#kcount))
  krad2 = Radius(bx,by,kx(#kcount),ky(#kcount))
  
  
  kangle1 = Angle(kx(#kcount-1),ky(#kcount-1),kx(#kcount),ky(#kcount))
  kangle2 = Angle(bx,by,kx(#kcount),ky(#kcount))
  
  
  kxm(#kcount) = (kxm(#kcount) + Cos(kangle1)*krad1/brems+ Cos(kangle2)*krad2/brems)/dampf
  kym(#kcount) = (kym(#kcount) + Sin(kangle1)*krad1/brems+ Sin(kangle2)*krad2/brems)/dampf +kgrav
  
  
  kx(#kcount) = kx(#kcount) + kxm(#kcount)
  ky(#kcount) = ky(#kcount) + kym(#kcount)
  
  If MouseButton(1)
    rad.f = Radius(mx,my,bx,by)
    
    angle.f = Angle(mx,my,bx,by)
      If rad > 128
    
    bxm = bxm + Cos(angle)*(rad*ratio)
    bym = bym + Sin(angle)*(rad*ratio)
    EndIf
    kdisp.b = 1
  
  Else
    kdisp = 0
  
  EndIf
  bym = bym + 0.1
  
  
  bxm = bxm/1.00001
  bx = bx + bxm
  by = by + bym
  If by > screenh-brad
    by = screenh-brad 
    bym = -bym/2
  EndIf
  
    StartDrawing(ScreenOutput())
      DrawText(0,0,Str(screenw)+" x "+Str(screenh))
      
      DrawText(0,32,StrF(krad))
      
      
      
      
     ; Line(bx,by,Cos(angle)*222,Sin(angle)*222,RGB(255,0,0))
      
      
      FrontColor(RGB(255,255,255))
      Line(mx-16,my,33,0)
      Line(mx,my-16,0,33)
      
        LineXY(mx,my,kx(0),ky(0))
      For n = 0 To #kcount-1
        ;Circle(kx(n),ky(n),2,RGB(255,255,255))
        LineXY(kx(n),ky(n),kx(n+1),ky(n+1))
      Next
        LineXY(kx(#kcount),ky(#kcount),bx,by)
      
      
      
      DrawingMode(#PB_2DDrawing_Outlined)
        Circle(bx,by,brad,RGB(255,255,0))
      
    StopDrawing()
  
  FlipBuffers()
  ClearScreen(0)
Until KeyboardPushed(#PB_Key_Escape)Code: Alles auswählen
InitSprite() 
InitKeyboard() 
InitMouse() 
#kcount = 8 ; Anzahl der Knotenpunkte des Seils/Gummibandes 
brems.f = 2.2 ; je niedriger desto strammer 
dampf.f = 1.5 ; je mehr desto stärker wird gedämpft 
kgrav.f = 0.1 ; gravitationswirkung auf das Seil 
Procedure.f Angle(p1x.f, p1y.f,p2x.f,p2y.f) 
  tsx.f = p1x - p2x 
  tsy.f = p1y - p2y 
  
  If tsx = 0 And tsy = 0 
    ProcedureReturn 0 
  Else 
    
    ang.f = ATan(tsy/tsx) 
    
    If p1x < p2x 
      ang + #PI 
    EndIf 
    ProcedureReturn ang 
  EndIf 
EndProcedure 
Procedure.f Radius(p1x.f,p1y.f,p2x.f,p2y.f) 
  ProcedureReturn Sqr(Pow(p1x-p2x,2)+Pow(p1y-p2y,2)) 
EndProcedure 
OpenWindow(0,0,0,185,30,"RTS-Auflösung",#PB_Window_ScreenCentered| #PB_Window_SystemMenu) 
  CreateGadgetList(WindowID(0)) 
    ComboBoxGadget(0,5,5,120,200) 
      AddGadgetItem(0,-1,"800x600") 
      AddGadgetItem(0,-1,"1024x768") 
      AddGadgetItem(0,-1,"1280x768") 
      AddGadgetItem(0,-1,"1280x800") 
      AddGadgetItem(0,-1,"1280x1024") 
      SetGadgetState(0,4) 
    ButtonGadget(1,130,5,50,20,"OK") 
    
    
    Dim kx.f(#kcount) 
    Dim ky.f(#kcount) 
    Dim kxm.f(#kcount) 
    Dim kym.f(#kcount)    
    
Repeat 
  wevent.l = WaitWindowEvent() 
  
  Select wevent 
  
    Case #PB_Event_CloseWindow 
      End 
      
    Case #PB_Event_Gadget 
    
      If EventGadget() = 1 
        res.b = GetGadgetState(0)      
        CloseWindow(0) 
        Break 
      EndIf 
      
  EndSelect 
ForEver 
Global screenw.l, screenh.l 
Select res 
  Case 0 
    screenw = 800 
    screenh = 600 
    
  Case 1 
    screenw = 1024 
    screenh = 768 
    
  Case 2 
    screenw = 1280 
    screenh = 768 
  Case 3 
    screenw = 1280 
    screenh = 800 
    
  Case 4 
    screenw = 1280 
    screenh = 1024 
EndSelect 
OpenScreen(screenw, screenh,32,"RTS-Test") 
Global mx.f, my.f, mspeed.f 
mx = screenw/2 
my = screenh/2 
mspeed = 1 
Global bx.f, by.f, bxm.f , bym.f, brad.f,ratio.f 
brad = 22 
bx = screenw/2 
by = screenh/2 
bxm = 0 
ratio = 0.001 
Repeat 
  ExamineKeyboard() 
  ExamineMouse() 
  mx = MouseX() 
  my = MouseY() 
  
  krad1.f = Radius(mx,my,kx(0),ky(0)) 
  krad2.f = Radius(kx(1),ky(1),kx(0),ky(0)) 
  
  
  kangle1.f = Angle(mx,my,kx(0),ky(0)) 
  kangle2.f = Angle(kx(1),ky(1),kx(0),ky(0)) 
  
  
  kxm(0) = (kxm(0) + Cos(kangle1)*krad1/brems+ Cos(kangle2)*krad2/brems)/dampf 
  kym(0) = (kym(0) + Sin(kangle1)*krad1/brems+ Sin(kangle2)*krad2/brems)/dampf + kgrav 
  
  
  kx(0) = kx(0) + kxm(0) 
  ky(0) = ky(0) + kym(0) 
  For n = 1 To #kcount-1 
  
  
  krad1 = Radius(kx(n-1),ky(n-1),kx(n),ky(n)) 
  krad2 = Radius(kx(n+1),ky(n+1),kx(n),ky(n)) 
  
  
  kangle1 = Angle(kx(n-1),ky(n-1),kx(n),ky(n)) 
  kangle2 = Angle(kx(n+1),ky(n+1),kx(n),ky(n)) 
  
  
  kxm(n) = (kxm(n) + Cos(kangle1)*krad1/brems+ Cos(kangle2)*krad2/brems)/dampf 
  kym(n) = (kym(n) + Sin(kangle1)*krad1/brems+ Sin(kangle2)*krad2/brems)/dampf + kgrav 
  
  
  kx(n) = kx(n) + kxm(n) 
  ky(n) = ky(n) + kym(n) 
  
  
  Next 
  
  
  krad1 = Radius(kx(#kcount-1),ky(#kcount-1),kx(#kcount),ky(#kcount)) 
  krad2 = Radius(bx,by,kx(#kcount),ky(#kcount)) 
  
  
  kangle1 = Angle(kx(#kcount-1),ky(#kcount-1),kx(#kcount),ky(#kcount)) 
  kangle2 = Angle(bx,by,kx(#kcount),ky(#kcount)) 
  
  
  kxm(#kcount) = (kxm(#kcount) + Cos(kangle1)*krad1/brems+ Cos(kangle2)*krad2/brems)/dampf 
  kym(#kcount) = (kym(#kcount) + Sin(kangle1)*krad1/brems+ Sin(kangle2)*krad2/brems)/dampf +kgrav 
  
  
  kx(#kcount) = kx(#kcount) + kxm(#kcount) 
  ky(#kcount) = ky(#kcount) + kym(#kcount) 
  
  If MouseButton(1) 
    rad.f = Radius(mx,my,bx,by) 
    
    angle.f = Angle(mx,my,bx,by) 
      If rad > 128 
    
    bxm = bxm + Cos(angle)*(rad*ratio) 
    bym = bym + Sin(angle)*(rad*ratio) 
    EndIf 
    kdisp.b = 1 
  
  Else 
    kdisp = 0 
  
  EndIf 
  bym = bym + 0.1 
  
  
  bxm = bxm/1.00001 
  bx = bx + bxm 
  by = by + bym 
  If by > screenh-brad 
    by = screenh-brad 
    bym = -bym/2 
  EndIf 
  
  If bx > screenw-brad
    bx = screenw -brad
    bxm = -bxm/2
  EndIf   
  
  If bx < brad
    bx = brad
    bxm = -bxm/2
  EndIf 
  
  
  
  
  
    StartDrawing(ScreenOutput()) 
      DrawText(0,0,Str(screenw)+" x "+Str(screenh)) 
      
      DrawText(0,32,StrF(by)) 
      
      
      
      
     ; Line(bx,by,Cos(angle)*222,Sin(angle)*222,RGB(255,0,0)) 
      
      
      FrontColor(RGB(255,255,255)) 
      Line(mx-16,my,33,0) 
      Line(mx,my-16,0,33) 
      
      If kdisp
        LineXY(mx,my,kx(0),ky(0)) 
      For n = 0 To #kcount-1 
        Circle(kx(n),ky(n),3,RGB(255,255,255)) 
        LineXY(kx(n),ky(n),kx(n+1),ky(n+1)) 
        
      Next 
        Circle(kx(#kcount),ky(#kcount),3,RGB(255,255,255))
        LineXY(kx(#kcount),ky(#kcount),bx,by) 
      EndIf
      
      
      
      DrawingMode(#PB_2DDrawing_Outlined) 
        Circle(bx,by,brad,RGB(255,255,0)) 
      
    StopDrawing() 
  
  FlipBuffers() 
  ClearScreen(0) 
Until KeyboardPushed(#PB_Key_Escape)