Цитата:
Сообщение от ЗлОй ПрОграММер
но если кто решит как дополнить код буду благодарен)
|
На бокс2Д сделать, пример

Код:
package
{
import flash.display.*;import flash.events.*;import flash.ui.*;
// Classes used in this example
import Box2D.Dynamics.*;import Box2D.Collision.*;import Box2D.Collision.Shapes.*;
import Box2D.Dynamics.Joints.*;import Box2D.Dynamics.Contacts.*;import Box2D.Common.*;
import Box2D.Common.Math.*;
/**
* ...
* @author Lexcuk
*
https://sites.google.com/site/murmadillo/content/TopViewDocBox2_1.swf (в IE че-то не открывается, в опере работает)
*/
public class TopViewDocBox2_1 extends Sprite
{
private var move:Boolean, revers:Boolean, right:Boolean, left:Boolean;
public var world:b2World;
public var sharaBody:b2Body;
public function TopViewDocBox2_1() {
init();
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
addEventListener(Event.ENTER_FRAME, Update);
}
private function init():void{
// Creat world AABB
var sprite:Sprite = new Sprite();
addChild(sprite);
world = new b2World(new b2Vec2(0,0), false);
var debugDraw:b2DebugDraw = new b2DebugDraw();
debugDraw.SetSprite(sprite);
debugDraw.SetDrawScale(1);
debugDraw.SetFillAlpha(0.3);
debugDraw.SetLineThickness(1.0);
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
world.SetDebugDraw(debugDraw);
//начало рамка уровня
var sD:b2BodyDef = new b2BodyDef();
var sB:b2PolygonShape = new b2PolygonShape();
var w:Number = 800, h:Number = 600;
var wall:Array = [w/2, 0, w/2, 5, w/2, h, w/2, 5, 0, h/2, 5, h/2, w, h/2, 5, h/2];
var i:int, c:int;
for (i = 0; i < 4;i++){
sD.position.Set(wall[c++], wall[c++]); sB.SetAsBox(wall[c++], wall[c++]);
world.CreateBody(sD).CreateFixture2(sB,1);
}
//конец рамка уровня
//начало препятствия уровня (рандомно разбросанные квадраты
for (i = 0; i < 100; i++) {
sD.position.Set(int(5+Math.random()*75)*10, int(5+Math.random()*55)*10); sB.SetAsBox(5, 5);
world.CreateBody(sD).CreateFixture2(sB,1);
}
//конец прапятствия уровня
world.DrawDebugData();
//начало создание персоонажа
sD.position.Set(100, 100); sB.SetAsBox(10, 15);
sD.type = b2Body.b2_dynamicBody;
sD.linearDamping = 1;
sD.angularDamping = 1;
sharaBody = world.CreateBody(sD);
sharaBody.CreateFixture2(sB, 0);
sB.SetAsOrientedBox(3, 3, new b2Vec2(0, 6));
sharaBody.CreateFixture2(sB, 0);
var b2Mass:b2MassData = new b2MassData();
b2Mass.mass = 1;
b2Mass.I = 1;
b2Mass.center = new b2Vec2(0,0);
sharaBody.SetMassData(b2Mass);
sharaBody.SetSleepingAllowed(false);
//конец создание персоонажа
}
public function Update(e:Event):void {
world.ClearForces();
//trace(move);
var axis:b2Vec2 = sharaBody.GetTransform().R.col2.Copy();
if (move) axis.Multiply(40)
if (revers) axis.Multiply(-40)
if (!move&&!revers) axis.Multiply(0);
sharaBody.SetLinearVelocity(axis);
if (left) sharaBody.SetAngularVelocity(1);
if (right) sharaBody.SetAngularVelocity(-1);
if (!left&&!right) sharaBody.SetAngularVelocity(0);
//if (revers) sharaBody.SetLinearVelocity(new b2Vec2(-1000000000, -1000000));
world.Step ( 1/30, 10, 10 );
world.DrawDebugData();
}
private function keyHandler(e:KeyboardEvent):void {
//trace(e.keyCode); //w - 87 a - 65 d - 68 s - 83
if (e.type==KeyboardEvent.KEY_DOWN) keyFunc(e.keyCode, true);
if (e.type==KeyboardEvent.KEY_UP) keyFunc(e.keyCode, false);
}
private function keyFunc(k:int, t:Boolean):void {
if (k == Keyboard.UP || k == 87) move = t;
if (k == Keyboard.DOWN || k == 83) revers = t;
if (k == Keyboard.RIGHT || k == 68) right = t;
if (k == Keyboard.LEFT || k == 65) left = t;
}
}
}