2013-08-30 5 views
2

До сих пор я был полностью в шоке от этого, и у меня было несколько дней на нем, и большинство ссылок, которые я следил, и поиски, которые я выполнил, привели меня к нулю.Как использовать ActionScript «Классы» с файлом Flex MXML?

Я хочу сделать простую игру с интерфейсом мыши, но я также хотел добавить прелоадер. Сначала я использовал minibuilder, поскольку он является кросс-платформенным, и я нахожусь в Linux, но все учебные пособия, которые я видел для добавления прелоадера, казались ему несовместимыми.

Таким образом, я перешел к простому компилятору Flex и текстовому редактору напрямую, но мне не повезло, и даже прелоадер (который, кажется, единственный, который действительно работает), является простой копией из учебник, который, случайно, работал.
В идеале я хотел бы просто использовать файл MXML, чтобы указать на preloader - с файлом CustomPreloader.as для preloader - и запустить классы ActionScript, возможно, используя FlashPunk вместе с моим кодом, чтобы помочь.

Это код до сих пор, для каждого из файлов, кроме CustomPreloader.as, как прелоадер уже работает: (Примечание: Все файлы находятся в ~/ASClasses/ЦСИ)

File: ASClasses.mxml 
-------------------- 
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    backgroundColor="#333333" 
    creationComplete="init();" 
    width="800" height="500" 
    frameRate="60" 
    preloader="CustomPreloader" 
> 
<mx:Script> 
<![CDATA[ 

//This part is mostly for testing purposes 
//======================================== 
import mx.controls.Alert; 
public function init():void { 
    Alert.show("The first function works."); 
} 

//And this is what I actually wanted to do 
//======================================== 
import Application; 
//Whenever I uncomment the following line, some error is thrown and the init function stops working at all. 
//public var myApp:Application = new Application; 
//addChild(myApp); 

]]> 
</mx:Script> 
</mx:Application> 
File: Application.as 
-------------------- 
package{ 
    import flash.display.Shape; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
    import flash.display.Sprite; 

    public class Application extends Sprite{ 
     public function Application(){ 
      stage.scaleMode = StageScaleMode.NO_SCALE; 
      stage.align = StageAlign.TOP_LEFT; 
      stage.frameRate = 60; 
      rotationX = -45; 
      var s:Shape = new Shape; 
      s.x = 400; 
      s.y = 200; 
      s.rotation = 90; 
      addChild(s); 
     } 
     addEventListener('enterFrame', function(e:Event):void{ 
      s.rotation += 2.5; 
     }); 
    } 
} 

Однако раскомментирована линия, необходимой для добавления Application.as кажется просто выдаст ошибку, так что я думаю, что я либо промах какой-то код или что я сделал что-то неправильно.

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

Кроме того, если есть простые и простые в использовании простые учебники для создания простой/упрощенной игры/демо, я бы тоже признал, что, как и большинство учебников, которые я видел до сих пор, только документы Flex и Actionscript, и легко усложнится, прежде чем я действительно смог что-то сделать.

Заранее спасибо.

Редактировать 1: Кроме того, может быть стоит упомянуть, что способ, которым он в настоящее время, по-прежнему удаляет оповещение после загрузки.

ответ

1

Попробуйте

this.rawChildren.addChild(myApp); 

Вместо

addChild(myApp); 

Применение расширяет контейнер, и когда вы добавляете ребенка в контейнер, ребенок должен реализовывать интерфейс IUIComponent. Поскольку класс спрайтов не реализует интерфейс, он даст вам ошибку.

Вот некоторая информация об этом Container addChild

EDIT

поставить добавление кода приложения в функцию, как и

public function init():void { 
    Alert.show("The first function works."); 

    var myApp:Application = new Application(); 
    this.rawChildren.addChild(myApp); 
} 
+0

Спасибо, но это все-таки бросил ошибку при компиляции, хотя : «Ошибка: это ключевое слово нельзя использовать в статических методах. Его можно использовать только в методах экземпляра, закрытии функций и глобальном коде». Спасибо за попытку помочь хотя бы, я действительно теряю то, что нужно делать прямо сейчас. – Devvie

+0

Я отредактировал ответ, вы должны добавить myApp в функцию. – Pan

+0

Спасибо, что решили проблему компиляции! По-прежнему существует проблема с тем, что сам класс просто бросает ошибку, когда я нажимаю на экран, но я буду принимать ваш ответ, поскольку он помог с проблемой, которую я опубликовал. Еще раз спасибо! – Devvie