PDA

Просмотр полной версии : Странное поведение прелоадера


motoroller
31.12.2010, 00:51
Есть небольшой класс для прелоадера:
Он работает, только одна проблемка, что он начинает срабатывать, но не сразу: показывать проценты и картинку загрузки начиная примерно с 40% ... а дальше все идет в штатном порядке... как все-таки его заставить раньше показывать процент загрузки хотя бы с 1% :)


package com {

import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.PixelSnapping;
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;


public class Preloader extends MovieClip {
public static const ENTRY_FRAME:Number=1;
private var progressText:TextField;
//private var pbp:ProgressBar;

public function Preloader() {
stop();

progressText = getChildByName("loading_txt") as TextField;
//pbp = getChildByName("loading_pb") as ProgressBar;
animation = getChildByName("animation") as MovieClip;

//pbp.mode = ProgressBarMode.MANUAL;
//pbp.setProgress(0, 100);

loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandlerP);
loaderInfo.addEventListener(Event.COMPLETE, completeHandlerP);
}

private function progressHandlerP(event:ProgressEvent):void {
var loaded:uint = event.bytesLoaded;
var total:uint = event.bytesTotal;
var percentLoaded:Number = Math.round((loaded/total) * 100);
animation.gotoAndStop(percentLoaded);
//trace(percentLoaded)
//pbp.setProgress(percentLoaded, 100);
progressText.text = "Загрузка " + percentLoaded + "%";
}

private function completeHandlerP(event:Event):void {
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}

private function enterFrameHandler(event:Event):void {
if (currentFrame >= Preloader.ENTRY_FRAME) {
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
gotoAndStop(2);
}
}
}
}

iflamberg
31.12.2010, 01:28
О. Это ты отстал от жизни. Стартует прелоадер с 40%, потому что у тебя много тяжелых прилинкованых мувиков, у которых стоит галочка "'экспорт в первый кадр". Пока первый кадр не загружен - код не начнет исполнятся. Вот читай (http://etcs.ru/blog/as1/export_in_second_frame_flash_cs3/) и смотри (http://www.portentinteractive.com/blog/advanced-actionscript-3-preloa.htm).

motoroller
31.12.2010, 03:36
Скажите а только от этого зависит?
Посомтрел я видео, там надо всю структуру менять,
скажите есть ли другой выход какой?

Добавлено через 6 минут
Странная реакиця, убрал галочки "'экспорт в первый кадр", стало еще хуже практически на 100% выскакивает теперь, что же это такое получается...
Теперь опять лучше, короче все эти галочки дали мне 10%
а где же ещё 30% ...

TanaTiX
31.12.2010, 04:41
Суть действий сводится к тому, чтоб убрать максимум контента (по крайней мере того, который занимает большой объем памяти) из кадра, содержащего прелоадер. Ко всему этому стоит добавить, что кадры при запуске флеша проигрываются по мере загрузки этих кадров, а не всей флешки целиком. Поэтому в настройках нужно ставить экспорт в другой (например, 2й) кадр.

iflamberg
31.12.2010, 13:17
Если убрать "галочки", то экспортируемые элементы загружаются с тем кадром, где они впервые упоминаются в коде, или впервые оказываются на сцене.
В твоём случае возможно проще сделать внешний прелоадер, чтобы не менять структуру всей флешки.

mikhailk
31.12.2010, 13:39
+1
если все уже собрано и работает - проще прикрутить внешний прелоадер.

motoroller
31.12.2010, 18:20
Вообщем я опнял что надо делать, скажите пожалуйста у меня несколько файлов для загрузки в разных местах, конечно хочется сделать универсальный прелоадер,с передачей параметров и тд.
Скажите реально сделать ресайз флешки, допустим у меня прелоадер 100X100, а после загрузки у меня флешка меняет размеры допустим 200X200?
А то не хочется для каждой флешки еще отдельно и делать отдельный прелоадер

Gaen
31.12.2010, 19:02
Вконтакт же сделал :) Значит и вы сможете.

motoroller
31.12.2010, 19:33
Еще вопрос все-таки не стал я заморачивать с внешним прелоадером, нашел примерчик

Но почему-то стопорится тут (http://www.flasher.ru/forum/showpost.php?p=908791&postcount=3)
updateAfterEvent();


Ошибка,
Scene 1, Layer 'action', Frame 1, Line 56 1180: Call to a possibly undefined method updateAfterEvent.

Скажите как этот метод можно поключить?

iflamberg
31.12.2010, 19:53
Тот пример на as2 вообще.

Ты хелп-то открой и посмотри, что за метод updateAfterEvent и зачем он нужен. Этот метод есть у MouseEvent и TimerEvent, чтобы обновить изображения на экране сразу после возникновения события.

motoroller
31.12.2010, 21:48
Пробую сделать внений прелоадер, все работает,
но возникает проблема с alchemy
не хочет работать


Not using domain memory
local system
local system w/o gsprite
Static init...
Undefined sym: _abort
Starting work...
Lib didn't register
RangeError: Error #1506: Указан недопустимый диапазон.
at cmodule.aircall::FSM__start/work()
at cmodule.aircall::CRunner/work()
at cmodule.aircall::CLibInit/init()
at uploaderResize_fla::MainTimeline/frame1()[uploaderResize_fla.MainTimeline::frame1:43]
Load Complete


Если запускаю сразу основую флешку то таких проблем нет

mikhailk
31.12.2010, 21:59
Как делаете внешний прелоадер?
Код покажите.

motoroller
31.12.2010, 22:35
// Set up the loader object
var request:URLRequest = new URLRequest("Content.swf"); // File path is relative to this preloader
var loader:Loader = new Loader();

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

// Update the percentage display
function loadProgress(event:ProgressEvent):void
{
var percentLoaded:Number = event.bytesLoaded / event.bytesTotal;
percentLoaded = Math.round(percentLoaded * 100);

this.percentLoaded.text = String(uint(percentLoaded)) + "%";
}

// Load complete, hide the animating graphic and text
function loadComplete(event:Event):void
{
trace("Load Complete");
this.rotatingOrb.visible = false;
this.percentLoaded.visible = false;
}

loader.load(request);
this.addChild(loader);


Вообще-то наверно лучше внутренний, потому с внешним много гимора, плюс у меня параментры разные, да и размер флешки потом менять ...
А с внутренним тоже не все лады,
все по максиммому убираю из первого кадра только прелоадер там, и все ранво с 60%...
А еще хотелось бы узнать влияб ли impotк и когда его вставлять

TanaTiX
01.01.2011, 12:47
А с внутренним тоже не все лады,
Вообще-то лады в обоих случаях, нужно просто уметь использовать. Ищите ошибки в своих реализациях.
А еще хотелось бы узнать влияб ли impotк и когда его вставлять
Ставить только в тех классах, где используется. Import импортирует целиком указанный класс в том случае, если этот класс используется.

iflamberg
01.01.2011, 14:18
import никак не влияет на размеры ролика. Если класс не упоминается в коде, то несмотря на import, он не будет добавлен в swf. Импорт просто говорит компилятору где искать упомянутые классы.

TanaTiX
01.01.2011, 14:48
iflamberg
в том случае, если этот класс используется.
В общем сказали одно и тоже