Показать сообщение отдельно
Старый 18.01.2012, 14:42
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 3  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
Цитата:
Сообщение от goodguy
Вообще, что-то странное этот цикл творит. Нужно логику цикла перебрать, тут проблема явно не в бокс2д.
А что в нем может быть не так? Может быть мне вам подробно описать создание самого объекта?

Добавлено через 7 часов 11 минут
Не стал плодить очередную тему. Решил здесь спросить. Никак не могу понять, как работает метод SetAsBox в Box2D. Разбирал и примеры и мануалы читал, но так и не догнал.


Код AS3:
Класс для создания динамического тела
 
private static const RATIO:Number = 30;   // 1 метр = 30 пикселей
private static const BLOCK_HALF:Number = 16; // Половина размера блока
 
var location:Point = new Point(320, 64);
var block:MovieClip = new BlockMovie(); // блок у которого width = 32 и height = 32
block.gotoAndStop(1);
parent.addChild(block);
 
var blockShapeDef:b2PolygonDef = new b2PolygonDef();
blockShapeDef.SetAsBox(BLOCK_HALF / RATIO, BLOCK_HALF / RATIO);
blockShapeDef.density = 1; // плотность
blockShapeDef.friction = 0;
blockShapeDef.restitution = 0.45;
 
var blockBodyDef:b2BodyDef = new b2BodyDef();
blockBodyDef.position.Set(location.x / RATIO, location.y / RATIO);
 
var blockBody:b2Body = PhysiVals.world.CreateBody(blockBodyDef);
blockBody.CreateShape(blockShapeDef);
blockBody.SetMassFromShapes();

Код AS3:
Класс для создания статического тела
 
private static const RATIO:Number = 30;                // 1 метр = 30 пикселей
private static const BLOCK_HALF:Number = 32;       // Половина высоты и ширины блока
 
var location:Point = new Point(320, 256);  
var blockSprite:Sprite = new Sprite();
blockSprite.graphics.beginFill(0x28990E);
blockSprite.graphics.drawRect(0, 0, 64, 64);    // блок у которого ширина = 64 и высота = 64
blockSprite.graphics.endFill();
parent.addChild(blockSprite);
 
var blockShapeDef:b2PolygonDef = new b2PolygonDef();
blockShapeDef.SetAsBox(BLOCK_HALF / RATIO , BLOCK_HALF / RATIO);
blockShapeDef.density = 0;  // плотность
blockShapeDef.friction = 0;
blockShapeDef.restitution = 0;
 
var blockBodyDef:b2BodyDef = new b2BodyDef();
blockBodyDef.position.Set(location.x / RATIO, location.y / RATIO);
 
var blockBody = PhysiVals.world.CreateBody(blockBodyDef);
blockBody.CreateShape(blockShapeDef);
blockBody.SetMassFromShapes();


Точка регистрации у мувиклипа находится посередине, т.е. (X = -16, Y = -16). Почему образуется такой большой разрыв между статическим и динамическим телом?

Добавлено через 29 часов 57 минут
Ну что так и не кто не подскажет?


Последний раз редактировалось goldlider; 20.01.2012 в 19:15.