Jump to content

[Action Script 3.0] Krzywe beziera


Kim Bo
 Share

Recommended Posts

Witam szukam przykładowych skryptów/algorytmów prostej grawitacji. Potrzebuję stworzyć efekt rzucania piłką. Gdy ograniczeniami odbicia są jedynie proste ściany (np zewnętrzne krawędzie sceny) wszystko działa spoko, jednak chcę aby piłeczka reagowała również na krzywe, np turlała się na skośnej podłodze itp. Przy czym nie chcę korzystać z gotowych silników typu Box2D.

 

Mam jeszcze jedno pytanko. Mianowicie przy zadeklarowanych stałych typu rotacja(kąt pod jakim będziemy rzucać piłkę), siła, friction i grawitacja, chciałbym wyznaczyć krzywą reprezentującą ruch który ma nastąpić. Ktoś może pomóc???

Link to comment
Share on other sites

jak nie chcesz korzystać z innych silników to czeka Cie długa droga. Dwa razy widziałem jak zdolni flash devi pisali engine fizyki i dwa razy harmonogram tego nie wytrzymał ;) do tego optymalizacja itp. jednym słowem - skorzystaj.

 

druga sprawa to zwykła matma - przy silniku cudzym on to załatwi za Ciebie, przy własnym modyfikujesz wektor ruchu zgodnie z danymi siły, tarcia, masy i oddziaływań. jak wyzej - odpuść sobie nie ma co ameryki wymyślać.

Link to comment
Share on other sites

Witam szukam przykładowych skryptów/algorytmów prostej grawitacji. Potrzebuję stworzyć efekt rzucania piłką. Gdy ograniczeniami odbicia są jedynie proste ściany (np zewnętrzne krawędzie sceny) wszystko działa spoko, jednak chcę aby piłeczka reagowała również na krzywe, np turlała się na skośnej podłodze itp.?

Przeanalizuj sobie CDK http://code.google.com/p/collisiondetectionkit/

Link to comment
Share on other sites

Tak jak Grave napisał. W przykładnie gdzie się rysuje przeszkody dla piłeczki jest dosyć sprytnie napisany silniczek fizyczny. Osobiście zrobiłem z niego osobna klasę, z której często korzystam. Tutaj masz jej cały kod:

 

Ta klasa, najlepije działa z innymi klasami z com.coreyoneil.collision. W parametrze metody calcColl (calculate Collision), podajesz tablice z kolizjami, oraz objekt, który ma właściwości vx i vy (wektory 2D). trzeci parametr to określenie czy funkcja ma zwrócić same wektory, czy też przemieścić obiekt, poprzez dodanie wektorów do pozycji x i y. Ostatnim parametrem jest siła grawitacji.

 

package com.coreyoneil.collision

 

{

import engine.Enum;

 

public class Repulse

{

private var GRAVITY :Number;

private const FRICTION :Number = .98;

private const IMMOVABLE :Number = 10000;

private var returnVec :Array;

private const MAXSPEED :int = 20;

 

public function Repulse()

{

// constructor code

}

 

public function calcColl(collisions:Array, _object:Object, _speed:Number, vOrXY:String, gravityParam:Number = .75):Array

{

if(collisions.length)

{

var collision:Object = collisions[0];

var angle:Number = collision.angle;

var overlap:int = collision.overlapping.length;

 

var sin:Number = Math.sin(angle);

var cos:Number = Math.cos(angle);

 

var vx0:Number = _object.vx * cos + _object.vy * sin;

var vy0:Number = _object.vy * cos - _object.vx * sin;

 

vx0 = ((_object.mass - IMMOVABLE) * vx0) / (_object.mass + IMMOVABLE);

_object.vx = vx0 * cos - vy0 * sin;

_object.vy = vy0 * cos + vx0 * sin;

 

_object.vx -= cos * overlap / _object.radius;

_object.vy -= sin * overlap / _object.radius;

 

_object.vx += _speed;

}

GRAVITY = gravityParam;

_object.vy += GRAVITY;

_object.vy *= FRICTION;

_object.vx *= FRICTION;

 

//this is very importent set of ifs - without it object can take very high vx and vy

//if you wish to have faster object - set the MAXSPEED

if (_object.vy > MAXSPEED) _object.vy = MAXSPEED;

if (_object.vx > MAXSPEED) _object.vx = MAXSPEED;

if (_object.vy

if (_object.vx

 

switch (vOrXY)

{

case Enum.VECTOR:

{

returnVec = new Array();

returnVec.push(_object.vx);

returnVec.push(_object.vy);

return(returnVec);

}

case Enum.XY:

{

_object.x += _object.vx;

_object.y += _object.vy;

}

}

return(null);

}

}

}

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy