
Код:
package {
import Box2D.Dynamics.*;
import Box2D.Common.Math.b2Vec2;
import Box2D.Collision.b2AABB;
import Box2D.Collision.Shapes.*;
import flash.display.MovieClip;
import flash.display.StageScaleMode;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
public class Menu extends MovieClip {
//физический мир
public var e:MouseEvent;
public var btnP:SimpleButton = new btnPlay();
public var btnQ:SimpleButton = new btnQuit();
public var btnSL:SimpleButton = new btnSelectLevel();
public var btnMG:SimpleButton = new btnMoreGames();
public var btnI:SimpleButton = new btnInstructions();
public var btnE:SimpleButton = new btnEditors();
public var mcKey1:musicKey1 = new musicKey1();
public var mcKey2:musicKey2 = new musicKey2();
public var mcDynamic1:dynamic1 = new dynamic1();
public var mcDynamic2:dynamic2 = new dynamic2();
public var mc:box = new box();
public var m_world:b2World;
public var m_iterations:int = 10;
public var m_timeStep:Number = 1 / 30;
public var m_physScale:Number = 30;
public var xcoord = 1 / 30;
public var ycoord = 1 / 30;
public function Menu():void {
//рамки физмира
var worldAABB:b2AABB = new b2AABB();
worldAABB.lowerBound.Set(-1000.0, -1000.0);
worldAABB.upperBound.Set(1000.0, 1000.0);
//вектор гравитации
var gravity:b2Vec2 = new b2Vec2(0.0,18.0);
var doSleep:Boolean = true;
m_world = new b2World(worldAABB,gravity,doSleep);
//создаем статическую планку
addFon();
addForm();
addMusicKey1(e);
addDynamic1(e);
addNazva();
addAllButtons();
addLetter(false);
//запускаем обновление мира
addEventListener(Event.ENTER_FRAME, Update);
}
//счетчик для частоты выпадения кирпичей
var zt:int = 0;
//частота выпадения кирпичей (больше - реже)
var q:int = 10;
//обновление мира
function Update(e:Event) {
//выпадаем кирпич
if (zt > q) {
zt = 0;
addLetter(true);
}
//приращиваем счетчик выпадения кирпичей
zt++;
//"делаем шаг" физического мира - тут рассчитываются положения физических тел
m_world.Step(m_timeStep, m_iterations);
//пробегаем по всем физическим телам и двигаем их мувики на свои места
//"их мувики" храним в пользовательских данных тела
for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
if (bb.m_userData is Sprite && ! bb.IsStatic()) {
bb.m_userData.x = bb.GetPosition().x * m_physScale;//X
bb.m_userData.y = bb.GetPosition().y * m_physScale;//Y
bb.m_userData.rotation = bb.GetAngle() * (180/Math.PI);//поворот
}
//если тело за пределами экрана - убиваем его и его мувик
if (bb.GetPosition().y > 14 && bb.m_userData is Sprite) {
Game.gameLink.removeChild(bb.m_userData as Sprite);
m_world.DestroyBody(bb);
}
}
}
//функция добавления кнопок управления игрой.
function addAllButtons():void {
}
//функция добавления скрипичного ключа(1).
function addMusicKey1(e:MouseEvent):void {
trace("Работает 1");
mcKey1.x = 155;
mcKey1.y = 270;
Game.gameLink.addChild(mcKey1);
}
//функция добавления скрипичного ключа(2).
function addMusicKey2(e:MouseEvent):void {
trace("Работает 2");
Game.gameLink.removeChild(mcKey1);
mcKey2.x = 155;
mcKey2.y = 270;
Game.gameLink.addChild(mcKey2);
}
//функция добавления динамика(1).
function addDynamic1(e:MouseEvent):void {
trace("Работает 1 дин");
mcDynamic1.x = 389;
mcDynamic1.y = 270;
Game.gameLink.addChild(mcDynamic1);
}
//функция добавления динамика(2).
function addDynamic2(e:MouseEvent):void {
trace("Работает 2 дин");
Game.gameLink.removeChild(mcDynamic1);
mcDynamic2.x = 389;
mcDynamic2.y = 270;
Game.gameLink.addChild(mcDynamic2);
}
//функция добавления названия игры.
function addNazva():void {
var mc:nazva = new nazva();
mc.x = 272;
mc.y = 172;
Game.gameLink.addChild(mc);
}
//функция добавления фона
function addFon():void {
var mc:blackFon = new blackFon();
mc.x = 275;
mc.y = 200;
Game.gameLink.addChild(mc);
}
//функция добавления статического тела меню
function addForm():void {
var body:b2Body;
var bodyDef:b2BodyDef = new b2BodyDef();
var boxDef:b2PolygonDef = new b2PolygonDef();
var mc:mainMenu = new mainMenu();
mc.x = 275;
mc.y = 200;
bodyDef.position.x = mc.x * xcoord;
bodyDef.position.y = mc.y * ycoord;
//создаем тело - прямоугольник. Физическое тело будет чутка меньше мувика - для реализьма.
boxDef.SetAsBox((mc.width-2)/m_physScale/2, (mc.height-2)/m_physScale/2);
//в пользовательские данные тела запихиваем мувик
bodyDef.userData = mc;
//создаем тело
body = m_world.CreateBody(bodyDef);
//придаем ему форму
body.CreateShape(boxDef);
//офизичиваем тело на основе данных о массе и форме
body.SetMassFromShapes();
//для лучшего определения столкновений ставим true. Увлекаться этим параметром не рекомендуется - если тел много, будут тормоза
body.SetBullet(true);
//добавляем мувик тела на сцену
Game.gameLink.addChild(mc);
}
//функция добавления мячика
function addLetter(l:Boolean) {
if (l) {
//тело
var body:b2Body;
//определитель тела
var bodyDef:b2BodyDef = new b2BodyDef();
//форма тела
var boxDef:b2CircleDef = new b2CircleDef();
//мувик тела
var mc:box = new box();
//и кладем определитель тела где-нибудь чуть выше верхнего предела экрана
bodyDef.position.x = Math.random() * 10 + 4;
bodyDef.position.y = -1;
//если делаем кирпич - задаем плотность, трение, "прыгучесть" тела
//не задаем, если - планка, в этом случае тело будет статическим
boxDef.radius = 0.48;
boxDef.density = 0.3;
boxDef.friction = 0.5;
boxDef.restitution = 0.7;
//в пользовательские данные тела запихиваем мувик
bodyDef.userData = mc;
//создаем тело
body = m_world.CreateBody(bodyDef);
//придаем ему форму
body.CreateShape(boxDef);
//офизичиваем тело на основе данных о массе и форме
body.SetMassFromShapes();
//для лучшего определения столкновений ставим true. Увлекаться этим параметром не рекомендуется - если тел много, будут тормоза
body.SetBullet(true);
//добавляем мувик тела на сцену
Game.gameLink.addChild(mc);
}
}
}
}
А вот какие ошибки выдает:

Код:
1067: Неявное приведение значения типа btnQuit к несоответствующему типу flash.display:SimpleButton.
1067: Неявное приведение значения типа btnSelectLevel к несоответствующему типу flash.display:SimpleButton.
1067: Неявное приведение значения типа btnMoreGames к несоответствующему типу flash.display:SimpleButton.
1067: Неявное приведение значения типа btnInstructions к несоответствующему типу flash.display:SimpleButton.
1067: Неявное приведение значения типа btnEditors к несоответствующему типу flash.display:SimpleButton.
Смысл ошибок я понимаю!!!Неявное приведение, но ведь это кнопки и базовый класс стоит SimpleButton!!!Что за глюк? С Флешем проблем быть не может?