
SWF сплэшскрин и прелоадер для игры на Stencyl
Всем привет, решил поделиться небольшим решением которое возможно будет полезно тем кто разрабатывает и продает игры на Stencyl.
На днях один из моих друзей попросил меня помочь ему встроить сплэшскрин спонсора в формате swf в игру написанную на Stencyl а также добавить нормальный прелоадер с прогресбаром перед всем этим делом. К сожалению стенсил больше не имеет поддержки свц библиотек, так что единственно возможный вариант это написание враппера. Первым делом пришлось убрать из сплэша все звуки так как они никак не хотели стопиться программно и продолжали играть фоном после удаления сплэша со сцены, вероятно это связано с тем что сплэш сделан на ас2(возможно кто-нибудь подскажет решение в комментах). Я вынес их в отдельную библиотеку src.swc вместе с мувиком прелоадера и стартскрином спонсора.
Внешний вид дерева проекта:

Документ класс Shell
Исходники можно взять тут, в архиве в качестве игры лежит swf со стандартным примером из Stencyl.
На днях один из моих друзей попросил меня помочь ему встроить сплэшскрин спонсора в формате swf в игру написанную на Stencyl а также добавить нормальный прелоадер с прогресбаром перед всем этим делом. К сожалению стенсил больше не имеет поддержки свц библиотек, так что единственно возможный вариант это написание враппера. Первым делом пришлось убрать из сплэша все звуки так как они никак не хотели стопиться программно и продолжали играть фоном после удаления сплэша со сцены, вероятно это связано с тем что сплэш сделан на ас2(возможно кто-нибудь подскажет решение в комментах). Я вынес их в отдельную библиотеку src.swc вместе с мувиком прелоадера и стартскрином спонсора.
Внешний вид дерева проекта:

Документ класс Shell
package
{
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.utils.getDefinitionByName;
import flash.events.TimerEvent;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import flash.net.*;
import flash.utils.Timer;
import flash.media.SoundMixer;
/**
* ...
* @author MXPain
*/
public class Shell extends MovieClip
{
//встраиваем ресурсы с прелоадером и игрой
[Embed(source="../lib/game.swf")]
private var gameClass:Class;
private var game:MovieClip = new gameClass() as MovieClip;;
[Embed(source="../lib/intro.swf")]
private var introClass:Class;
private var intro:MovieClip;
//объект для хранения звуков
static public var snd:Object;
private var delay:uint = 6500;//время показа прелоадера
private var triggerTimer:Timer = new Timer(delay, 1);
//таймеры запуска звуков прелоадера
private var s1Timer:Timer;
private var s2Timer:Timer = new Timer(615, 1);
private var s3Timer:Timer = new Timer(1312, 1);
private var s4Timer:Timer = new Timer(2091, 1);
private var screen:StartScreen = new StartScreen();
private var loadbar:LoadBar = new LoadBar();
public function Shell()
{
if (stage) {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
}
addEventListener(Event.ENTER_FRAME, checkFrame);
addEventListener(Event.ADDED_TO_STAGE, onAdded);
loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
intro = new introClass() as MovieClip;
snd = new Object();
snd['rain'] = new rainSound();
snd['b1'] = new b1Sound();
snd['b3'] = new b3Sound();
this.stage.frameRate = 24;
var mult:Number = 1000 / this.stage.frameRate;
s1Timer = new Timer(mult*1, 1); //*1 - номер кадра со звуком
s2Timer = new Timer(mult*15, 1);
s3Timer = new Timer(mult*32, 1);
s4Timer = new Timer(mult*51, 1);
intro.addEventListener(MouseEvent.CLICK, onIntro);
triggerTimer.start();
triggerTimer.addEventListener(TimerEvent.TIMER_COMPLETE, completeHandler1);
s1Timer.start();
s1Timer.addEventListener(TimerEvent.TIMER_COMPLETE, completeHandler2);
s2Timer.start();
s2Timer.addEventListener(TimerEvent.TIMER_COMPLETE, completeHandler3);
s3Timer.start();
s3Timer.addEventListener(TimerEvent.TIMER_COMPLETE, completeHandler4);
s4Timer.start();
s4Timer.addEventListener(TimerEvent.TIMER_COMPLETE, completeHandler5);
}
private function onAdded(e:Event):void
{
addChild(screen);
addChild(loadbar);
loadbar.x = 12;
loadbar.y = 461;
loadbar.scaleX = 0;
}
static public var c1:SoundChannel = new SoundChannel();
static public var c2:SoundChannel = new SoundChannel();
private var rainPlayed:Boolean;
private var b11Played:Boolean;
private var b12Played:Boolean;
private var b3Played:Boolean;
private function ioError(e:IOErrorEvent):void
{
trace(e.text);
}
private function progress(e:ProgressEvent):void
{
loadbar.scaleX = stage.loaderInfo.bytesLoaded / stage.loaderInfo.bytesTotal;
}
private function checkFrame(e:Event):void
{
if (currentFrame == totalFrames)
{
//stop();
loadingFinished();
}
}
private function loadingFinished():void
{
removeEventListener(Event.ENTER_FRAME, checkFrame);
loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError);
removeChild(screen);
removeChild(loadbar);
addChild(intro);
}
private function completeHandler1(e:TimerEvent):void {
triggerTimer.stop();
triggerTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, completeHandler1);
removeChild(intro);
addChild(game);
}
private function completeHandler2(e:TimerEvent):void {
if (!rainPlayed)
{
c1 = (snd["rain"] as Sound).play();
rainPlayed = true;
}
}
private function completeHandler3(e:TimerEvent):void {
if (!b11Played)
{
c2 = (snd["b1"] as Sound).play();
b11Played = true;
}
}
private function completeHandler4(e:TimerEvent):void {
if (!b12Played)
{
c2 = (snd["b1"] as Sound).play();
b12Played = true;
}
}
private function completeHandler5(e:TimerEvent):void {
if (!b3Played)
{
c2 = (snd["b3"] as Sound).play();
b3Played = true;
}
}
private function onIntro(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.flashgameblogs.ru/"));
}
}
}
Исходники можно взять тут, в архиве в качестве игры лежит swf со стандартным примером из Stencyl.
- +10
- MXPain
Комментарии (3)
а это поможет в следующий раз