Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Статьи (http://www.flasher.ru/forum/forumdisplay.php?f=101)
-   -   Знакомство с Flash 9 и ActionScript 3.0 на примере создания аркадной игры (http://www.flasher.ru/forum/showthread.php?t=83431)

CrazyFlasher 17.12.2009 14:43

код не читабелен...читайте про конвенции оформления кода.

http://opensource.adobe.com/wiki/dis...ng+Conventions

DVHERO 17.12.2009 15:03

sky.as
Код AS3:

package main 
{
    import flash.display.MovieClip;
    import flash.events.*;
    import main.*;
 
    dynamic public class sky extends MovieClip
    {
 
      var new_asteroid:moving_object;
 
      public function sky()
      {
          addEventListener(Event.ENTER_FRAME, Update);
          dropAsteroid();
      }
 
      public function dropAsteroid():void
      {
        new_asteroid = new moving_object();
        addChild(new_asteroid);
        new_asteroid.drop(200,300, 500,500);
      }
 
      public function Update(e : Event):void
      {
        new_asteroid.move();               
      }
 
    }
}


moving_object.as
Код AS3:

package main 
{
    import flash.display.MovieClip;
    import main.*;
 
    dynamic public class moving_object extends basic_object
    {   
    const DROP_RADIUS:Number = 200;    // разброс при вбрасывании
    const MIN_SPEED:Number = 1// раброс начальной скорости
    const MAX_SPEED:Number = 10;
    public var Velocity:Vector; // вектор движения
 
        public function moving_object()
        {
                var num:Number;
                num = Math.floor(Math.random()*totalFrames)+1;
                gotoAndStop(num); // и переходим на него
                Velocity = new Vector(); // создаем вектор
                // вычислим наш радиус, основываясь на размере картинки
                radius = Math.floor((width+height)/4);   
        }
 
                // Вбросить объект рядом с указанной точкой x1:y1 и двигаться к x2:y2
        public function drop(x1:Number,y1:Number, x2:Number,y2:Number):void
        {
              // координата вброса
              x = x1 + (Math.random()-0.5)*DROP_RADIUS;
              y = y1 + (Math.random()-0.5)*DROP_RADIUS;
              // направление
              Velocity.setMembers(x2-x, y2-y);
              // скорость
              var spd:Number = MIN_SPEED + (MAX_SPEED-MIN_SPEED)*Math.random();
              // приведем длину вектора к выбранной скорости
              Velocity.mulScalar( spd / Velocity.magnitude() );
        }
 
        // Переместиться
        public function move():void
        {
                      x += Velocity.x;
                    y += Velocity.y;
        }
    }
}

переделал....
Так будет правильно?

MerlinTwi 22.12.2009 13:14

Судя по коду все верно, но раз не работает, то последовательно ищите ошибку. Добавляйте trace в коде, чтобы убедиться, что все нужные функции вызываются и параметры верные.
Добавьте в sky.as
Код AS3:

      public function Update(e : Event):void 
      {
trace("new_asteroid=", new_asteroid); // убедиться, что new_asteroid проинициализирован
        new_asteroid.move();               
      }

в moving_object.as
Код AS3:

        public function move():void
        {
                      x += Velocity.x;
                    y += Velocity.y;
trace(this, "x:y=", x, y, "Velocity=", Velocity); // убедиться, что функция вызывается и координаты меняются
        }


waror 28.12.2009 16:40

ненавжу adobe ппц неужели неьзя сделать норм скачку? все какую то парашу с меня требует. я зарегался .а дальше черт с кастылем махает урод


а так спасибо за статью :D

zikoriy 10.01.2010 11:16

классно) спасибо, обязательно прочту) а ты по ас1 и 2 ничего не писал?)

McSun 13.01.2010 23:29

Цитата:

Сообщение от MerlinTwi (Сообщение 575687)
Nirth, спасибо за столь подробный разбор статьи. Все замечания учту в версии 2.0

Версия 2.0 увидела свет? :)

застрял на классе background
сначала ругалось на parent.startDrag() и parent.stopDrag() - Call to a possibly undefined method startDrag through a reference with static type flash.display:DisplayObjectContainer

как учили старшие товарищи обыграл так: (parent as MovieClip).startDrag(...

но дальше - хуже, еще ругается на строки if (root.panel.dragged_mc) и root.panel.handleMouseUp(); - Access of possibly undefined property panel through a reference with static type flash.display:DisplayObject
есть стойкое ощущение, что содержимое fla-файла не вполне соответствует его описанию :)
че делать то?

MerlinTwi 14.01.2010 09:48

> ругается "Access of possibly undefined property"
правильно ругается. Свойство parent имеет тип DisplayObject у которого нет методов типа startDrag или свойств dragged_mc и т.п. С точки зрения компилятора такой код неверен. Можно это обходить приведением типов (как вы правильно писали parent as MovieClip), а можно попросить компилятор закрыть глаза на эту вопиющую безграмотность (Publish Settings -> Action script .. Settings -> снять галочку Strict Mode), и все скомпилируется и заработает и даже без ошибок, поскольку в качестве parent там MovieClip, у которого есть все требуемые методы и свойства.

> Версия 2.0 увидела свет?
нет. С точки зрения грамотного ООП программирования на AS3, эта статья полная лажа. Яркий пример того, как не надо писать на AS3 :) Ее не стоит рекомендовать желающим изучить AS3... но она может быть полезна тем, кто переходит с AS1,2 на AS3, поскольку после AS1,2 еще остается процедурное мышление и навязчивое желание вызывать не свои методы напрямую, типа parent.startDrag

McSun 14.01.2010 20:32

Цитата:

Сообщение от MerlinTwi (Сообщение 878974)
С точки зрения грамотного ООП программирования на AS3, эта статья полная лажа. Яркий пример того, как не надо писать на AS3 :) Ее не стоит рекомендовать желающим изучить AS3... но она может быть полезна тем, кто переходит с AS1,2 на AS3...

а что (кроме Мука) можно почитать, чтобы грамотно писать на AS3?

ageent 17.02.2010 13:19

огромное спасибо

cpu 14.03.2010 17:38

Решил делать сам по тексту, не смотря в исходники(зато ошибки компиляции отлавливаю, все делаю в строгом режиме:bb:). Мозг уже сломал наверно.
У меня непонимание места с секторами, и проверкой на столкновение.
А именно
Код AS3:

delete all_sectors[s][obj.name];

и
Код AS3:

all_sectors[s][obj.name]=obj;

.

Представляю так:
all_sectors[1][name 1]
all_sectors[1][name 2]
all_sectors[1][name 3]

если проверять на существование all_sectors[1], то даст true.
Если удалить все
all_sectors[1][name 1]
all_sectors[1][name 2]
all_sectors[1][name 3]

то при проверка на существование all_sectors[1], даст false.

Короче
Код AS3:

delete all_sectors[s][obj.name];

делается, что бы не совершать проверку на столкновение с самим собой(скажем так)?


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

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