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)