| джонатан |
20.10.2010 18:47 |
Bgg: та же ошибка.
Vier:
Код AS3:
package com.russianRoulette {
import flash.display.MovieClip;
import flash.events.Event;
import com.flashgangsta.managers.ButtonManager;
import fl.text.TLFTextField;
import flash.net.URLLoader;
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import caurina.transitions.Tweener;
import flash.system.LoaderContext;
import flash.system.ApplicationDomain;
import flash.system.SecurityDomain;
import flash.display.DisplayObject;
import flash.events.ProgressEvent;
import com.russianRoulette.Communicator;
public class PersonagesRepository extends MovieClip {
public static const SECTION_SHOP:String = "shop";
public static const SECTION_REPOSITORY:String = "repository";
public static const PERSONAGE_MOTION_FRAMES:int = 15;
public static const PERSONAGE_TRANSITION:String = "easeInOutCubic";
private var main:Main;
private var currentPersonage:Number = 0;
private var currentSection:String;
private var currentId:String;
private var showcase:MovieClip;
private var nameLable:TLFTextField;
private var costLable:TLFTextField;
private var button:MovieClip;
private var prevButton:MovieClip;
private var nextButton:MovieClip;
private var personage:Sprite;
private var firstView:Boolean = true;
private var personageLoader:Loader = new Loader();
private var title:TLFTextField;
private var personageGoOutNext:Object;
private var personageGoOutPrev:Object;
private var personageGoIn:Object;
private var confirmation:Confirmation;
private var blockRect:BlockRect;
private var messageWindow:Message;
private var buyingSuccess:Boolean;
private static var personagesData:XML;
public function PersonagesRepository( mainLink:Main, section:String, data:XML ) {
this.addEventListener( Event.ADDED_TO_STAGE, init );
main = mainLink;
currentSection = section;
personagesData = data;
}
private function init( event:Event ):void {
trace( "PersonagesRepository init" );
this.removeEventListener( Event.ADDED_TO_STAGE, init );
this.addEventListener( Event.REMOVED_FROM_STAGE, removed );
gotoAndStop( currentSection );
currentPersonage = 0;
prevButton = prev_mc;
nextButton = next_mc;
showcase = showcase_mc;
nameLable = showcase.name_txt;
button = showcase.button_mc;
title = title_txt;
if( showcase.cost_txt ) costLable = showcase.cost_txt;
personageGoOutNext = {x: -( stage.stageWidth / 2 ), useFrames: true, time: PersonagesRepository.PERSONAGE_MOTION_FRAMES, transition: PersonagesRepository.PERSONAGE_TRANSITION, onComplete: function():void { this.parent.removeChild( this ) } };
personageGoOutPrev = {x: stage.stageWidth + ( stage.stageWidth / 2 ), useFrames: true, time: PersonagesRepository.PERSONAGE_MOTION_FRAMES, transition: PersonagesRepository.PERSONAGE_TRANSITION, onComplete: function():void { this.parent.removeChild( this ) } };
personageGoIn = {x: Math.round( stage.stageWidth / 2 ), useFrames: true, time: PersonagesRepository.PERSONAGE_MOTION_FRAMES, transition: PersonagesRepository.PERSONAGE_TRANSITION };
ButtonManager.addButton( prevButton, showPrevPersonage );
ButtonManager.addButton( nextButton, showNextPersonage );
ButtonManager.addButton( button, buttonClicked );
ButtonManager.setButtonEnable( prevButton, false, true );
showPersonage();
}
public function removed( event:Event ):void {
trace( "PersonagesRepository removed" );
this.removeEventListener( Event.REMOVED_FROM_STAGE, removed );
ButtonManager.removeButton( prevButton );
ButtonManager.removeButton( nextButton );
ButtonManager.removeButton( button );
ButtonManager.removeButton( prevButton );
}
private function setLable( name:String, cost:String, id:String ):void {
nameLable.text = name;
if( costLable ) costLable.text = "Стоимость: " + cost + " серебряных кредитов";
}
private function showPersonage():void {
var personageNode:XML = PersonagesRepository.personagesData.personage[ currentPersonage ];
setLable( personageNode.@name, personageNode.@cost, personageNode.@id );
loadPersonage();
}
private function loadPersonage():void {
if( personageLoader.contentLoaderInfo.bytesLoaded !== personageLoader.contentLoaderInfo.bytesTotal) {
personageLoader.close();
}
personageLoader.contentLoaderInfo.removeEventListener( ProgressEvent.PROGRESS, personageProgress );
personageLoader.contentLoaderInfo.removeEventListener( Event.COMPLETE, personageLoaded );
var request:URLRequest = new URLRequest( PersonagesRepository.personagesData.personage[ currentPersonage ].@url );
var top:int = Math.round( title.y + title.height );
var bottom:int = showcase.y;
personage = new Sprite();
if( firstView ) {
personage.x = Math.round( stage.stageWidth / 2 );
firstView = false;
}
personage.y = top + Math.round( ( bottom - top ) / 2 );
this.addChild( personage );
personage.addChild( new PersonageRepositoryPreloader() );
var preloader:DisplayObject = personage.getChildAt( personage.numChildren - 1 );
preloader.x = -Math.round( preloader.width / 2 );
personageLoader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, personageProgress );
personageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, personageLoaded );
personageLoader.load( request, new LoaderContext( false, ApplicationDomain.currentDomain, SecurityDomain.currentDomain ) );
}
private function personageProgress( event:ProgressEvent ):void {
var preloader = personage.getChildAt( personage.numChildren - 1 );
var precent:int = Math.round( event.bytesLoaded / event.bytesTotal * 100 );
preloader.lable_txt.text = precent + "%";
}
private function personageLoaded( event:Event ):void {
personage.removeChild( personage.getChildAt( personage.numChildren - 1 ) );
event.target.content.x = -Math.round( event.target.content.width / 2 );
event.target.content.y = -Math.round( event.target.content.height / 2 );
personage.addChild( event.target.content );
event.target.removeEventListener( ProgressEvent.PROGRESS, personageProgress );
event.target.removeEventListener( Event.COMPLETE, personageLoaded );
}
private function showPrevPersonage( target:MovieClip ):void {
Tweener.addTween( personage, personageGoOutPrev );
currentPersonage--;
showPersonage();
personage.x = -( stage.stageWidth / 2 );
Tweener.addTween( personage, personageGoIn );
if( currentPersonage === PersonagesRepository.personagesData.personage.length() - 2 ) {
ButtonManager.setButtonEnable( nextButton, true, true );
}
if( currentPersonage === 0 ) {
ButtonManager.setButtonState( prevButton, ButtonManager.STATE_OUT );
ButtonManager.setButtonEnable( prevButton, false, true );
}
}
private function showNextPersonage( target:MovieClip ):void {
Tweener.addTween( personage, personageGoOutNext );
currentPersonage++;
showPersonage();
personage.x = stage.stageWidth + ( stage.stageWidth / 2 );
Tweener.addTween( personage, personageGoIn );
if( currentPersonage === 1 ) {
ButtonManager.setButtonEnable( prevButton, true, true );
}
if( currentPersonage === PersonagesRepository.personagesData.personage.length() - 1 ) {
ButtonManager.setButtonState( nextButton, ButtonManager.STATE_OUT );
ButtonManager.setButtonEnable( nextButton, false, true );
}
}
private function buttonClicked( target:MovieClip ):void {
var currentPersonageInfo:XML = PersonagesRepository.personagesData.personage[ currentPersonage ];
var message:String;
currentId = currentPersonageInfo.@id;
if( currentSection === PersonagesRepository.SECTION_SHOP ) {
message = "Вы уверены что хотите купить " + currentPersonageInfo.@name + " за " + currentPersonageInfo.@cost + " серебряных кредитов?"
blockRect = new BlockRect();
confirmation = new Confirmation( message, buy, abort );
main.addChild( blockRect );
main.addChild( confirmation );
}
}
private function buy():void {
main.communicator.buyPersonage( currentId, onBuyed, VkErrors.buyPersonageError ); //Отправляем запрос на покупку персонажа
confirmation.setLable( "Подождите..." );
}
private function abort():void {
removeConfirmation();
removeBlockRect();
}
private function removeConfirmation():void {
main.removeChild( confirmation );
confirmation = null;
}
private function removeBlockRect():void {
main.removeChild( blockRect );
blockRect = null;
}
private function onBuyed( response:XML ):void {
buyingSuccess = response.success != 0; //Запоминаем результат сделки
trace( buyingSuccess );
removeConfirmation();
messageWindow = new Message( response.message, messageClose ); //Выводим окно с результатом сделки
main.addChild( messageWindow );
}
private function messageClose():void {
main.removeChild( messageWindow );
messageWindow = null;
removeBlockRect();
if( buyingSuccess ) { //Если персонаж был куплен то идём к профайлу.
this.parent.removeChild( this );
main.showProfile.call();
}
}
}
}
main.showProfile() самая последняя строчка
|