Сдраствуйте дорогие друзья.ела простеньку игрушку на AS 3.0.Изуча (пс. на клавиатуре некоторые клавиши не пашут все ни как нову не купл...) все это дело совсем недавно.Вобщем застрял с концами рось по поисковикам ну ни как не могу разобраться.Прошу вашей помощи.Постарась обьяснить как смогу доступней.Построил все восновном на первом кадре верхнем слое назвав actions.
Код:
Код AS3:
var monstersInGame:uint;
var monsterMaker:Timer;
var container_mc:MovieClip;
var cursor:MovieClip;
var energy:int;
var score:int;
var live:Number =3;
var myTimer1:Timer;
var monster:MovieClip;
далее функция старта первой комнаты
Код AS3:
function startlevel1():void
{
жизни lives это instance name мувика с жизнями,он помещен на сцену
Код AS3:
if(live==3){
lives.gotoAndStop(3);}
if(live==2){
lives.gotoAndStop(2);}
if(live==1){
lives.gotoAndStop(1);}
енергия
Код AS3:
energy = 4;
energy_mc.gotoAndStop(4);
energy_mc тоже instance name мувика добавленного на сцену
количество монстров
Код AS3:
monstersInGame = 8;
monsterMaker = new Timer(1000,monstersInGame);
container_mc = new MovieClip();
addChild(container_mc);
слушатели
Код AS3:
stage.addEventListener(MouseEvent.MOUSE_MOVE, dragCursor);
stage.addEventListener(MouseEvent.CLICK, clickCursor);
monsterMaker.addEventListener(TimerEvent.TIMER, createMonsters);
monsterMaker.start();
добовляем прицел
Код AS3:
cursor = new Cursor();
addChild(cursor);
прячем мышь
Код AS3:
Mouse.hide ();
score = 0;
}
Далее функция строим монстров
Код AS3:
function createMonsters(event:TimerEvent):void
{
monster = new Monster();
monster.x = Math.random() * stage.stageWidth;
if (monster.x <= 100) {
monster.x = 100;
}
else if (monster.x >= 380) {
monster.x = 350;
}
monster.y = Math.random() * stage.stageHeight;
if (monster.y <= 100)
{
monster.y = 100;
}
else if (monster.y >= 380)
{
monster.y = 350;
}
container_mc.addChild(monster);
код мувика монстр который мы добовляем в container_mc на сцену и по нему стреляем
весь код находится на первом кадре мувика монстр
Код AS3:
import fl.motion.Animator;
import fl.motion.MotionEvent;
это classic tween скопированный для AS 3.0
Код AS3:
var this_xml:XML = <Motion duration="30" xmlns="fl.motion.*" xmlns:geom="flash.geom.*" xmlns:filters="flash.filters.*">
<source>
<Source frameRate="12" x="185.3" y="253.3" scaleX="1" scaleY="1" rotation="0" elementType="movie clip" symbolName="Monster" class="Monster">
<dimensions>
<geom:Rectangle left="-52.65" top="-42.65" width="100" height="82"/>
</dimensions>
<transformationPoint>
<geom:Point x="0.5005" y="0.500609756097561"/>
</transformationPoint>
</Source>
</source>
<Keyframe index="0" tweenSnap="true" tweenSync="true">
<tweens>
<SimpleEase ease="0"/>
</tweens>
</Keyframe>
<Keyframe index="29" x="124" y="-60.95000000000002" scaleX="1.52" scaleY="1.415"/>
</Motion>;
var this_animator:Animator = new Animator(this_xml, this);
this_animator.play();
далее идут функции убить монстра проиграли и выграли
Код AS3:
this_animator.addEventListener(MotionEvent.MOTION_END, hurtPlayer);
function hurtPlayer (Event:MotionEvent): void
{
var main:MovieClip = MovieClip(this.parent.parent);
main.lose();
this.parent.removeChild(this);
}
this.addEventListener(MouseEvent.CLICK, killMonster);
function killMonster(event:MouseEvent):void
{
gotoAndPlay(31)
this_animator = new Animator(this_xml, this);
this_animator.play();
this_animator.addEventListener(MotionEvent.MOTION_END, die);
}
function die(event:MotionEvent):void
{
var main:MovieClip = MovieClip(this.parent.parent);
main.win();
this_animator.removeEventListener(MotionEvent.MOTION_END, hurtPlayer);
this.parent.removeChild(this);
}
далее функция прицела
Код AS3:
function dragCursor(event:MouseEvent):void
{
cursor.x = this.mouseX;
cursor.y = this.mouseY;
}
далее функция победили
Код AS3:
function win():void
{
score ++;
if(score >= 6)
{
monsterMaker.stop();
removeChild(cursor)
stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragCursor);
stage.removeEventListener(MouseEvent.CLICK, clickCursor);
removeChild(container_mc);
gotoAndStop(4);
с этого кадра например пойдем на втору комнату
далее проиграли вот тут все проблемы которые я ни как не могу решить как уже ток не ставил не двигал
Код AS3:
function lose():void // if lose level 1
{
energy --;
если добовля вот это
if(energy==4){
energy_mc.gotoAndStop(4);}
if(energy==3){
energy_mc.gotoAndStop(3);}
if (energy==2){
energy_mc.gotoAndStop(2);}
if(energy==1){
energy_mc.gotoAndStop(1);}
if(energy==0){
energy_mc.gotoAndStop(1);}
то игра играется но вылетает такая ошибка TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Monster/hurtPlayer()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at fl.motion::AnimatorBase/end()
at fl.motion::AnimatorBase/handleLastFrame()
at fl.motion::AnimatorBase/nextFrame()
at fl.motion::AnimatorBase/handleEnterFrame()
в debug мне выводит ошибку с клипа монстра с функции
function hurtPlayer (Event:MotionEvent): void
{
var main:MovieClip = MovieClip(this.parent.parent);"
вот эту строку там где мы проиграли "main.lose();
this.parent.removeChild(this);
}
Если убрать if(energy==3){
energy_mc.gotoAndStop(3);}...." то тогда начинает жаловатьсЯ на все убираемые Child removeChild(container_mc);
removeChild(cursor)
removeChild(gun)
removeChild(units)
выдает таку ошибку ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at smoe_fla::MainTimeline/decreaseEnergy()
Код AS3:
if(energy <= 1)
{
live--;
monsterMaker.stop();
removeChild(container_mc);
removeChild(cursor)
removeChild(gun)
removeChild(units)
Mouse.show();
stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragCursor);
stage.removeEventListener(MouseEvent.CLICK, clickCursor);
if (live==0)
{
gotoAndStop(1);
тут например самое начало старт игры
Код AS3:
}
else
{
gotoAndStop(3);
тут например продолжить игру и перейти на второй кадр где распологается startlevel1();
И такие же ошибки в случае если мы выграли.Подскажите пожалуйста как правельно строить функции проиграли выграли,поскольку ч то туда не поставл все ему не нравится.Спасибо.Хотел по понятней обьяснить но кажется все в кашу получилось.
Добавлено через 4 минуты
Да в функции function win где выграли там та же проблема с Child что и прогиграли.Прошу строго не судить если не в ту тему .Мучась уже очень долго ,прошу помощи.