MovieClip, счетчик почти работающий AS3 - PullRequest
0 голосов
/ 10 марта 2010

Как мне заставить мой счетчик работать? Пожалуйста, включите объяснение, и не стесняйтесь комментировать.

КОНФУЗИЯ: Я запутался в контейнере MovieClip в as3. общественный класс NumbersView расширяет MovieClip, так что, кажется, быть контейнером. Это может не быть проблемой, но вот где я заблудился.

Рабочая версия этого кода просто фантастическая. мой Код ниже - попытка пересмотреть его. Источник был адаптирован из разных умных людей. Это работа в процессе

ОБЪЕКТ БИБЛИОТЕКИ
'колонка с вертикальным номером' Имя: mc-NumberImage
Класс: NumberImage

ОШИБКИ ВЫХОДА 'Когда я раскомментирую код "
1023: несовместимое переопределение. NumbersView ...
1021: повторяющееся определение функции. NumbersView ...

                         //NUMBER DOCUMENT CLASS
                         //IMPORT
import flash.display.Sprite; 
import flash.events.Event; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 
import flash.display.DisplayObject; 
import flash.display.MovieClip; 
import flash.utils.Dictionary; 
import caurina.transitions.Tweener;

                         //COUNTER
    var timer:Timer = new Timer(1000);

    var count:int = 0;  
    var fcount:int = 0; 


    timer.addEventListener(TimerEvent.TIMER, incrementCounter);   
    timer.start();  

    function incrementCounter(event:TimerEvent) {   
      count++;   
      fcount=int(count*count/1000);

    } 
    function formatCount(i:int):String {  
         var fraction:int = i % 100;  
         var whole:int = i / 100;   
      return ("000000000" + i).substr(-9, 9);  
    }  


//------------------------------------------------------------------------
                         //PROBLEM AREA

       function enterFrameHandler(e:Event):void  
        { 
//          numbers.setTime(formatCount(fcount)); 
       } 


   var _listItems:Array = new Array(); 
     var previousNums:Array; 
    const numHeight:int = 120; 


     var NumbersView:Sprite = new Sprite();
  //var numbers:NumbersView = new NumbersView;

                         //NUMBERSVIEW
//   function NumbersView($n:int):void {

       _listItems = new Array(); 
       previousNums = new Array(); 
        var item:NumberImage; 
        var offset:int = _listItems.length;  
     for (var i:Number = 0; i < 9; i++) { 
           item = new NumberImage();
//  }//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//------------------------------------------------------------------------
                         //PUSH ARRAY
addChild(item);  
        item.x = i * item.width;  
           _listItems.push(item);  
      }
                         //TWEENER 'Y SCROLLING'
function setTime($number:String):void { 
            var nums:Array = $number.split(""); 

            for (var i:Number = 0; i < nums.length; i++) { 
                if (nums[i] == previousNums[i]) continue; 
                Tweener.removeTweens(_listItems[i]); 

                var newY:int = int(nums[i]) * -numHeight; 
                if (_listItems[i].y < 0) _listItems[i].y = numHeight; 
                Tweener.addTween(_listItems[i], { y:newY, time:3 } ); 
            } 
            previousNums = nums; 
        }  

D E S C R I P T I O N

COUNTER: formatCount необходимо передать Tweener

STAGE: для цикла, устанавливает дочерних элементов для добавления на сцену NumbersView становится элементом, а массив элементов добавляет дочерние элементы на сцену

TWEENER: увеличивает столбец вертикальных чисел каждый раз, когда счетчик пожаров добавляет и удаляет

ПОЧЕМУ
- обучение
- Преимущество в упрощении занятий и сдаче их в один FLA

альтернативный текст http://www.ashcraftband.com/myspace/videodnd/bobnums.jpg


БОЛЬШЕ О КЛАССЕ ДОКУМЕНТА
http://www.rubenswieringa.com/blog/class-syntax-in-actionscript30
http://www.heaveninteractive.com/weblog/2008/03/04/introduction-to-the-document-class-in-actionscript-30-tutorial


ПОСЛЕ ПРИМЕРА ДЕБУ

.FLA 'с символом в библиотеке, Class: NumberImage'

import flash.display.Sprite; 
import flash.events.Event; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 

var timer:Timer; 
var count:int = 0; 
var fcount:int = 0; 
var numbers:NumbersView; 

trace("-----new NumberDocument created");
timer = new Timer(10); 
timer.addEventListener(TimerEvent.TIMER, incrementCounter);     
timer.start();    
numbers = new NumbersView(); 
addChild(numbers); 

addEventListener(Event.ENTER_FRAME, enterFrameHandler);
//addEventListener(Event.ADDED_TO_STAGE, traceMeOut);


function incrementCounter(event:TimerEvent) 
{     
    count++;     
    fcount=int(count*count/1000);//starts out slow... then speeds up 
} 

function formatCount(i:int):String 
{    
    return ("000000000" + i).substr(-9, 9); 
} 

function enterFrameHandler(e:Event):void  
{ 
    numbers.setTime(formatCount(fcount)); 
} 
function traceMeOut()
{
    trace("-----Im here on stage!");
}

NumbersView.as

package   
{ 
    import flash.display.DisplayObject; 
    import flash.display.MovieClip; 
    import flash.utils.Dictionary; 
    import flash.events.Event; 
    import caurina.transitions.Tweener; 

    public class NumbersView extends MovieClip 
    { 
        private var _listItems:Array; 
        private var previousNums:Array; 
        private const numHeight:int = 120; 

        public function NumbersView()  
        { 
            _listItems = new Array(); 
            previousNums = new Array(); 

            var item:NumberImage; 
            for (var i:Number = 0; i < 9; i++) { 
                item = new NumberImage(); 
                addChild(item); 
                item.x = i * item.width; 
                _listItems.push(item); 
            } 
        } 

        public function setTime($number:String):void { 
            var nums:Array = $number.split(""); 

            for (var i:Number = 0; i < nums.length; i++) { 
                if (nums[i] == previousNums[i]) continue; 
                Tweener.removeTweens(_listItems[i]); 

                var newY:int = int(nums[i]) * -numHeight; 
                if (_listItems[i].y < 0) _listItems[i].y = numHeight; 
                Tweener.addTween(_listItems[i], { y:newY, time:3 } ); 
            } 
            previousNums = nums; 
        } 
    } 
} 

1 Ответ

0 голосов
/ 11 марта 2010

Я немного озадачен тем, что вы пытаетесь сделать, но я думаю, вы хотите воссоздать то, что происходит в numbers_works, в своем собственном файле numbers_broke. Для этого поместите этот код в свой первый кадр:

import flash.display.Sprite; 
import flash.events.Event; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 

var timer:Timer; 
var count:int = 0; 
var fcount:int = 0; 
var numbers:NumbersView; 

trace("-----new NumberDocument created");
timer = new Timer(10); 
timer.addEventListener(TimerEvent.TIMER, incrementCounter);     
timer.start();    
numbers = new NumbersView(); 
addChild(numbers); 

addEventListener(Event.ENTER_FRAME, enterFrameHandler);
//addEventListener(Event.ADDED_TO_STAGE, traceMeOut);


function incrementCounter(event:TimerEvent) 
{     
    count++;     
    fcount=int(count*count/1000);//starts out slow... then speeds up 
} 

function formatCount(i:int):String 
{    
    return ("000000000" + i).substr(-9, 9); 
} 

function enterFrameHandler(e:Event):void  
{ 
    numbers.setTime(formatCount(fcount)); 
} 
function traceMeOut()
{
    trace("-----Im here on stage!");
}

Теперь пример, который вы пытаетесь воссоздать, использует файлы внешних классов. Один из них называется NumbersView.as. Это должно быть в том же каталоге, что и ваш FLA-файл. Если вы скопируете это поверх своего кода и поместите NumbersView.as в нужное место, ваш файл должен делать то, что делает другой - я могу только предположить, что это то, что вы пытаетесь сделать ... Что приводит меня к нескольким другим указателям :

Ваши вопросы, особенно этот, часто невероятно трудно расшифровать. Например, что вы пытаетесь сделать, и в чем проблема? Во-вторых, ваш код ужасен , и я имею в виду в визуальном смысле. Очень важно писать хорошо структурированный, четко отформатированный код. Вам будет легче работать, легче возвращаться, а другим людям будет гораздо легче понять, в первую очередь. Прямо сейчас ваше форматирование повсюду. В-третьих, когда вы говорите, что получаете ошибки, вставьте всю ошибку, а не только начало - никто не знает, в чем реальная проблема:

1023: несовместимое переопределение. NumbersView ...

Так что, если вы хотите получить полезные ответы, я бы сказал, что начинать с таких основ было бы очень полезно для вас.

Наконец, в своем исходном коде внутри numbers_broken вы написали вверху, что это был класс документа. Класс документа во Flash - это особый класс, который реализован в правильной версии предоставленных вами файлов с номерами. Это указано на панели свойств FLA-файла, где вы видите «Class:». Он должен начинаться с заглавной буквы, и после того, как вы его укажете, вам нужно создать этот файл извне, с тем же именем, которое вы указали в этом поле, но к которому добавлен тип файла .as (ActionScript). Затем вам нужны определенные элементы, такие как объявление класса и конструктор; универсальный класс Document может выглядеть так:

package
{
    public class Main extends Sprite
    {
    //Property variables go here, eg:
    var someVariable:String = "Hello";

         //This is the constructor
         public function Main()
         {
              //Code goes here, which will be the first execution of your Flash file.
         }
}

Из ваших постов, на которые я отвечал, у меня складывается впечатление, что вы еще не полностью поняли концепцию объектно-ориентированного программирования и то, как классы входят в вашу кодировку. Если вы хотите, я могу дать вам более подробное объяснение. В то же время, я надеюсь, что это решит ваши текущие проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...