Eli tarvisin rägdollitappeluuni sellaista hidastustilaa(bullet time/slow motion) jossa kaikki hidastuu. Painovoima,liikkeet,kaikki.
Onko jotain valmista viritelmää?
Slow motion?
Slow motion?
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ä
Ragdollvoimistelua
Työn alla:
Rägdollitappelu jolle ei vielä nimeä löydy.
Valmiina:
Ei paljon mitään
Tulossa:
Kakkosplayeri, muutama ase,Bullet time,kenttiä
Re: Slow motion?
Itsekkin olen miettinyt aivan samaa räsynukkefysiikoiden kanssa, ja tullut siihen tulokseen ettei aivan yksinkertaista tapaa olekkaan. Korjatkaa mikäli olen väärässä.
Oma versioni perustuisi jäsenien liikuttamiseen taaksepäin, eli jokaisella ruumiinosalla olisi kordinaattien lisäksi tallessa vanhat kordinaatit, ja mikäli vauhtia haluttaisiin hidastaa, siirrettäisiin jäseniä taaksepäin haluttu määrä uusien sekä vanhojen kordinaattien välisessä kulmassa.
Tietenkin tämä haluttu määrä voisi olla jokin prosenttiluku, otettaisiin vanhan ja uuden pisteen välinen etäisyys jaettaisiin sadalla ja lopuksi kerrottaisiin halutulla prosenttimäärällä.
Tai sitten vain lasket framelimittiä
Oma versioni perustuisi jäsenien liikuttamiseen taaksepäin, eli jokaisella ruumiinosalla olisi kordinaattien lisäksi tallessa vanhat kordinaatit, ja mikäli vauhtia haluttaisiin hidastaa, siirrettäisiin jäseniä taaksepäin haluttu määrä uusien sekä vanhojen kordinaattien välisessä kulmassa.
Tietenkin tämä haluttu määrä voisi olla jokin prosenttiluku, otettaisiin vanhan ja uuden pisteen välinen etäisyys jaettaisiin sadalla ja lopuksi kerrottaisiin halutulla prosenttimäärällä.
Tai sitten vain lasket framelimittiä
Re: Slow motion?
Käsitin että tuo vaikuttaisi myös painovoimaan?CCE wrote:Itsekkin olen miettinyt aivan samaa räsynukkefysiikoiden kanssa, ja tullut siihen tulokseen ettei aivan yksinkertaista tapaa olekkaan. Korjatkaa mikäli olen väärässä.
Oma versioni perustuisi jäsenien liikuttamiseen taaksepäin, eli jokaisella ruumiinosalla olisi kordinaattien lisäksi tallessa vanhat kordinaatit, ja mikäli vauhtia haluttaisiin hidastaa, siirrettäisiin jäseniä taaksepäin haluttu määrä uusien sekä vanhojen kordinaattien välisessä kulmassa.
Tietenkin tämä haluttu määrä voisi olla jokin prosenttiluku, otettaisiin vanhan ja uuden pisteen välinen etäisyys jaettaisiin sadalla ja lopuksi kerrottaisiin halutulla prosenttimäärällä.
Tai sitten vain lasket framelimittiä
Korjatkaa jos olen väärässä.
Pitää jotain tuon pohjalta keksiä.
Re: Slow motion?
Eikö helpointa olisi laittaa ne raajojen ym. ominaisnopeudet muuttujaan, ja yksinkertaisesti pienentää muuttujan arvoa kun mennään bullet-timeen?
Re: Slow motion?
Uskoisin ettei tässä käytetyssä systeemissä raajoilla ole ominaisnopeuksia, vain pelkät pituudet sekä paikat.
Vai olenko missannut jotain tärkeää?
Vai olenko missannut jotain tärkeää?
Re: Slow motion?
No täytyy myöntää ettei mulla ole paljoa kokemusta ragdoll-fysiikoista, mutta ihan maalaisjärjellähän sen tajuaa että siinä täytyy olla jonkinlaiset suureet joilla raajoja käännetään ja liikutellaan. Toteutuksesta en sitten tiedä.
Edit.
No kattelin tota edellisten foorumien yhtä esimerkkiä, ja onhan se vähän niin ettei tommosia arvoja noin vain voi muutella. Sain kuitenkin lisättyä kyseiseen esimerkkikoodiin helposti slow-motionin lisäämäällä ajastimen, jonka avulla rajoitin niiden uusien pisteiden laskemista.
Space laukaisee slow-motionin.
Tässä vielä linkki alkuperäiseen koodiin.
http://www.coolbasic.com/oldforums/inde ... hl=ragdoll
Edit.
No kattelin tota edellisten foorumien yhtä esimerkkiä, ja onhan se vähän niin ettei tommosia arvoja noin vain voi muutella. Sain kuitenkin lisättyä kyseiseen esimerkkikoodiin helposti slow-motionin lisäämäällä ajastimen, jonka avulla rajoitin niiden uusien pisteiden laskemista.
Space laukaisee slow-motionin.
Code: Select all
SCREEN 800,600,0,1
// 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 = 5 // tarkkuus (mitä suurempi luku, sitä tarkempi, 1=minimi)
resetDoll()
Repeat
Box 150,50,500,500,0
Text 200,20,"LMB = drag left leg"
Text 400,20,"RMB = drag head"
Text 320,570,"R = reset doll"
If MouseDown(1) Then
xPosition(1) = MouseWX()
yPosition(1) = MouseWY()
ElseIf MouseDown(2) Then
xPosition(7) = MouseWX()
yPosition(7) = MouseWY()
EndIf
If KeyHit(19) Then resetDoll()
If KeyDown(cbkeyspace) Then
nopeus = 50
Else
nopeus = 0
EndIf
//Tähän lisätty ajastin, uudet sijainnit lasketaan aikaisempaa hitaammin.
If aika < Timer() - nopeus Then
aika = Timer()
// lasketaan fysiikat
simulate()
EndIf
//piirretään viivat HUOM: Alkuperäsessä koodissa nämä kutsut olivat simulate-funktion lopussa
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)
// 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(-250,xPosition(j)),250)
yPosition(j) = Min(Max(-250,yPosition(j)),250)
Next j
Next i
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
http://www.coolbasic.com/oldforums/inde ... hl=ragdoll