Rägdollionkelma

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
AllAh
Newcomer
Posts: 33
Joined: Mon Oct 08, 2007 8:37 am
Location: Muhos

Rägdollionkelma

Post by AllAh »

Joo yritin tunnin saada tähän kakkospleieriä ja sitten paloi hermot.
(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 
Valmiita:
Ragdollvoimistelua
Työn alla:
Rägdollitappelu jolle ei vielä nimeä löydy.
Valmiina:
Ei paljon mitään
Tulossa:
Kakkosplayeri, muutama ase,Bullet time,kenttiä
Post Reply