Jump to content

Flash: can't create user class


photo

Recommended Posts

In description about flash support you say:

Added support of ActionScript 2.0 (no polymorphism and exception handling yet), supported classes and methods:

So can we use our custom classes or not?

I try to use next:

class MainMenu 
{
var aa:Number = 2;

function MainMenu(skinAsset:MovieClip) 
{
	trace("MainMenu::constructor()");
}
}

or in ideal this:

class src.MainMenu // class in specific package
{
var aa:Number = 2;

function MainMenu(skinAsset:MovieClip) 
{
	trace("MainMenu::constructor()");
}
}

and on timeline in first frame:

var mainMenu:MainMenu = new MainMenu(controls);

or:

import src.MainMenu;

var mainMenu:MainMenu = new MainMenu(controls);

Both this patterns working in Flash IDE.

But get two different errors in Unigine (when we don't use import directive):

12:34:49 FlashContext::createObject(): can't create "MainMenu" object

or this:

12:33:21 FlashObject::getVariable(): can't get "src" variable
12:33:21 FlashInterpreter::run(): unknown action NEWMETHOD

Link to comment

I strongly recommend not to use custom AS classes.

:(

We need to use custom classes to realize usual components: Button, List, etc. It's not comfortable to use functional programming for it... but we try

Link to comment

Maybe you could try to realize custom AS classes, maybe without inheritance?

We can't think pattern that can replace custom classes. For example, we need realize settings window with ten MovieClip's buttons (custom buttons with multi-language support and base button logic, like over/out states, enable/disable states), check boxes, etc.

What pattern cab be done it? Create ten different .as files with unique code for every button it isn't a variant.

We can assign the same functions for all buttons, for example:

function mouseOutPrototype() 
{
trace("mouseOutPrototype");
this.gotoAndStop(1);
}

function mouseOverPrototype() 
{
trace("mouseOverPrototype");
this.gotoAndStop(2);
}

controls.btnResume.onRollOver = mouseOverPrototype;
controls.btnResume.onRollOut = mouseOutPrototype;

This pattern can substitute custom classes, but in this case Unihine not support this statement like Flash.

Have class support more flexible and useful that this statement realization.

Any ideas? Thanks

Link to comment

This is a workaround for "this" problem:

 

Ok, this is a variant.

I create as-file button.as:

stop();

var skin:MovieClip = this;

function mouseOutPrototype()
{
trace("mouseOutPrototype");
skin.gotoAndStop(1);
}

function mouseOverPrototype()
{
trace("mouseOverPrototype");
skin.gotoAndStop(2);
}

function mousePressPrototype()
{
trace("mousePressPrototype");
skin.gotoAndStop(3);

trace("function: " + skin.onPressPrototype);
//skin.onPressPrototype();
}

function mouseReleasePrototype()
{
trace("mouseReleasePrototype");
skin.gotoAndStop(2);
}

function mouseReleaseOutsidePrototype()
{
trace("mouseReleaseOutsidePrototype");
skin.gotoAndStop(1);
}

skin.onPress = mousePressPrototype;
skin.onRelease = mouseReleasePrototype;
skin.onReleaseOutside = mouseReleaseOutsidePrototype;
skin.onRollOver = mouseOverPrototype;
skin.onRollOut = mouseOutPrototype;

and include it to button's skin MovieClip. This works. Next, I need to "overload", extend base button's logic, I can do next (in main_menu MovieClip, that contains my buttons):

btnResumePress = function() 
{
trace("Source::MainMenu::eventNewGameButtonClick");
Engine.worldCall("Source::MainMenu::eventNewGameButtonClick");
}

skin["btnResume"].onPressPrototype = "btnResumePress";

And onPressPrototype variable is visible in button.as, this works both in flash and unigine:

function mousePressPrototype()
{
trace("mousePressPrototype");
skin.gotoAndStop(3);

trace("function: " + skin.onPressPrototype);
//skin.onPressPrototype();
}

But, If I try to save pointer on function:

btnResumePress = function() 
{
trace("Source::MainMenu::eventNewGameButtonClick");
Engine.worldCall("Source::MainMenu::eventNewGameButtonClick");
}

skin["btnResume"].onPressPrototype = btnResumePress;

This is work in flash, but in Unigine this is undefine:

function mousePressPrototype()
{
trace("mousePressPrototype");
skin.gotoAndStop(3);

trace("function: " + skin.onPressPrototype);
skin.onPressPrototype();
}

Could you add ability to save pointers on functions, then it can be equivalent to class system.

Link to comment
×
×
  • Create New...