(En ole tuohon koodiin muuta tehnyt kuin liikkumisen.)
VOisiko joku lisätä sen tähän:
Code: Select all
SCREEN 800,600,32,cbfullscreen
// ihminen koostuu (tässä tapauksessa) yhdestätoista pisteestä, joilla jokaisella
// on nykyinen ja edellinen sijainti xy - tasolla.
// Ideana on pitää jokainen piste vakioetäisyydellä määritellyistä pisteistä, jolloin ne käyttäytyvät realisisen oloisesti
Dim xPosition(11) As Float
Dim yPosition(11) As Float
Dim previousXposition(11) As Float
Dim previousYposition(11) As Float
Const PAINOVOIMA = -0.05 // painovoima ( negatiivinen = alaspäin, positiivinen = ylöspäin)
Const ACCURACY = 20 // tarkkuus (mitä suurempi luku, sitä tarkempi, 1=minimi)
resetDoll()
Repeat
Text 200,20,"T-F-G-H = Move body"
//liikkuminen
If KeyDown(cbkeyh) Then
xposition(7)=xposition(7)+1
ElseIf KeyDown(cbkeyf) Then
xposition(7)=xposition(7)-1
If KeyHit(19) Then resetDoll()
EndIf
If KeyDown(cbkeyt) Then
yposition(7)=yposition(7)+1
ElseIf KeyDown(cbkeyg) Then
yposition(7)=yposition(7)-1
EndIf
// lasketaan fysiikat
simulate()
// piirretään pää "suunnilleen" oikealle paikalle
kulma = GetAngle(xPosition(6),yPosition(6),xPosition(7),yPosition(7))
Circle ScreenWidth()/2+Cos(kulma)*20+xPosition(7),ScreenHeight()/2-(Sin(kulma+180)*20+yPosition(7)),20,0
DrawScreen
Forever
Function Simulate()
// lasketaan jokaiselle pisteelle uusi sijainti
For i=1 To 11
calculateNewXposition(i)
calculateNewYposition(i)
Next i
// pisteet siirretään ACCURACY:n mukaan joko kerran tai useita kertoja vakioetäisyydelle toisistaan
For i=1 To ACCURACY
// parametrit = ensimmäisen pisteen sijainti taulukossa, toisen pisteen sijainti taulukossa, pidettävä välimatka
sustainDistance(1,2,25)
sustainDistance(2,3,25)
sustainDistance(3,4,25)
sustainDistance(4,5,25)
sustainDistance(3,6,25)
sustainDistance(6,7,25)
sustainDistance(7,8,25)
sustainDistance(8,9,25)
sustainDistance(7,10,25)
sustainDistance(10,11,25)
// pisteet eivät saa ylittää pelikenttää
For j=1 To 11
xPosition(j) = Min(Max(-300,xPosition(j)),300)
yPosition(j) = Min(Max(-300,yPosition(j)),300)
Next j
Next i
//piirretään viivat
drawLine(1,2)
drawLine(2,3)
drawLine(3,4)
drawLine(4,5)
drawLine(3,6)
drawLine(6,7)
drawLine(7,8)
drawLine(8,9)
drawLine(7,10)
drawLine(10,11)
EndFunction
Function calculateNewXposition(pointNumber)
temp# = xPosition(pointNumber)
xPosition(pointNumber) = 2*xPosition(pointNumber) - previousXposition(pointNumber) // + kiihtyvyys X-suunnassa
previousXposition(pointNumber) = temp#
EndFunction
Function calculateNewYposition(pointNumber)
temp# = yPosition(pointNumber)
yPosition(pointNumber) = 2*yPosition(pointNumber) - previousYposition(pointNumber) + PAINOVOIMA // * PAINOVOIMAn tilalle voi sijoittaa minkä tahansa Y-suuntaisen kiihtyvyyden
previousYposition(pointNumber) = temp#
EndFunction
Function sustainDistance(firstPoint, secondPoint, distanceToSustain#)
xDistance# = (xPosition(firstPoint) - xPosition(secondPoint))
yDistance# = (yPosition(firstPoint) - yPosition(secondPoint))
currentDistance# = Sqrt(xDistance#^2+yDistance#^2)
multiplier# = (currentDistance#-distanceToSustain#)/currentDistance#
xPosition(firstPoint) = xPosition(firstPoint) - xDistance#*0.5*multiplier#
yPosition(firstPoint) = yPosition(firstPoint) - yDistance#*0.5*multiplier#
xPosition(secondPoint) = xPosition(secondPoint) + xDistance#*0.5*multiplier#
yPosition(secondPoint) = yPosition(secondPoint) + yDistance#*0.5*multiplier#
EndFunction
Function drawLine(firstPoint, secondPoint)
Line xPosition(firstPoint)+ScreenWidth()/2,ScreenHeight()/2-yPosition(firstPoint),xPosition(secondPoint)+ScreenWidth()/2,ScreenHeight()/2-yPosition(secondPoint)
EndFunction
Function resetDoll()
xPosition(1) = -50
yPosition(1) = -50
previousXposition(1) = -50
previousYposition(1) = -50
xPosition(2) = -25
yPosition(2) = -50
previousXposition(2) = -25
previousYposition(2) = -50
xPosition(3) = 0
yPosition(3) = -50
previousXposition(3) = 0
previousYposition(3) = -50
xPosition(4) = 25
yPosition(4) = -50
previousXposition(4) = 25
previousYposition(4) = -50
xPosition(5) = 50
yPosition(5) = -50
previousXposition(5) = 50
previousYposition(5) = -50
xPosition(6) = 0
yPosition(6) = -25
previousXposition(6) = 0
previousYposition(6) = -25
xPosition(7) = 0
yPosition(7) = 0
previousXposition(7) = 0
previousYposition(7) = 0
xPosition(8) = -25
yPosition(8) = 0
previousXposition(6) = -25
previousYposition(6) = 0
xPosition(9) = -50
yPosition(9) = 0
previousXposition(9) = -50
previousYposition(9) = 0
xPosition(10) = 25
yPosition(10) = 0
previousXposition(10) = 25
previousYposition(10) = 0
xPosition(11) = 50
yPosition(11) = 0
previousXposition(11) = 50
previousYposition(11) = 0
EndFunction