Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите разобраться с кодом AS 3.0 (http://www.flasher.ru/forum/showthread.php?t=140085)

Igors 19.05.2010 23:49

Помогите разобраться с кодом AS 3.0
 
Сдраствуйте дорогие друзья.ела простеньку игрушку на 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:

 
}
 
}

далее проиграли вот тут все проблемы которые я ни как не могу решить как уже ток не ставил не двигал
Код 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();
Код AS3:

 
}
}
}

И такие же ошибки в случае если мы выграли.Подскажите пожалуйста как правельно строить функции проиграли выграли,поскольку ч то туда не поставл все ему не нравится.Спасибо.Хотел по понятней обьяснить но кажется все в кашу получилось.

Добавлено через 4 минуты
Да в функции function win где выграли там та же проблема с Child что и прогиграли.Прошу строго не судить если не в ту тему .Мучась уже очень долго ,прошу помощи.

i.o. 20.05.2010 00:01

Оформите код тегами [AS3][/AS3]


Часовой пояс GMT +4, время: 14:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.