Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.11.2011, 11:38
ruslux вне форума Посмотреть профиль Отправить личное сообщение для ruslux Найти все сообщения от ruslux
  № 1  
Ответить с цитированием
ruslux

Регистрация: Jul 2010
Сообщений: 3
По умолчанию Проблемы с отображением

Код AS3:
package 
{
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.display.LoaderInfo;
	import flash.display.Loader;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.net.URLRequest;
 
	public class Main extends Sprite 
	{
		private var _game_width:int = 800;
		private var _game_height:int = 600;
		private var _loader:Loader;
		private var _url_request:URLRequest;
		private var _progress_bar:Shape;
		private var _progress_bar_line:Sprite;
		private var _movie:Sprite;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			//Защита от ресайза
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
 
			//Загружаем игрушку
			_url_request = new URLRequest("адрес swf");
			_loader = new Loader();
			_loader.load(_url_request);
			_loader.contentLoaderInfo.addEventListener(Event.OPEN, onOpenLoader);
			_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressLoader);
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
		}
 
		//отрисовываем контейнер прогресс-бара
		private function onOpenLoader(evt:Event):void {
			_progress_bar = new Shape();
			_progress_bar.graphics.beginFill(0x00ffff, 1);
			_progress_bar.graphics.drawRect((game_width-300)/2, (game_height-50)/2, 300, 50);
			_progress_bar.graphics.endFill();
			addChild(_progress_bar);
		}
 
		//отрисовываем прогресс-бар
		private function onProgressLoader(evt:Event):void {
			if (_progress_bar_line != null) {
				removeChild(_progress_bar_line);
			}
			_progress_bar_line = new Sprite();
			_progress_bar_line.graphics.beginFill(0xff00ff, 1);
			_progress_bar_line.graphics.drawRect((game_width - 300) / 2, (game_height - 50) / 2, (300 * _loader.contentLoaderInfo.bytesLoaded / _loader.contentLoaderInfo.bytesTotal), 50);
			_progress_bar_line.graphics.endFill();
			addChild(_progress_bar_line);
		}
 
		//удаляем прогресс-бар, отображаем игрушку, освобождаем ресурсы
		private function onLoaderComplete(evt:Event):void {
			removeChild(_progress_bar);
			removeChild(_progress_bar_line);
			_progress_bar = null;
			_progress_bar_line = null;
			_url_request = null;
			//_loader.width = _game_width;  
			//_loader.height = _game_height;
			_movie = Sprite(_loader.content);
			_loader = null;
			addChildAt(_movie, 0);
		};	
 
 
		//геттеры
		public function get game_width():int 
		{
			return _game_width;
		}
 
		public function get game_height():int 
		{
			return _game_height;
		}
 
	}
 
}
Проблема собственно в функциях
Код AS3:
		//отрисовываем контейнер прогресс-бара
		private function onOpenLoader(evt:Event):void {
			_progress_bar = new Shape();
			_progress_bar.graphics.beginFill(0x00ffff, 1);
			_progress_bar.graphics.drawRect((game_width-300)/2, (game_height-50)/2, 300, 50);
			_progress_bar.graphics.endFill();
			addChild(_progress_bar);
		}
 
		//отрисовываем прогресс-бар
		private function onProgressLoader(evt:Event):void {
			if (_progress_bar_line != null) {
				removeChild(_progress_bar_line);
			}
			_progress_bar_line = new Sprite();
			_progress_bar_line.graphics.beginFill(0xff00ff, 1);
			_progress_bar_line.graphics.drawRect((game_width - 300) / 2, (game_height - 50) / 2, (300 * _loader.contentLoaderInfo.bytesLoaded / _loader.contentLoaderInfo.bytesTotal), 50);
			_progress_bar_line.graphics.endFill();
			addChild(_progress_bar_line);
		}
Мне нужно отрисовать объект а потом изменять его ширину. Не получается - при изменениее ширины
Код AS3:
_progress_bar_line.width += 1
объект вовсе пропадает. Нужно создать объект и изменять его, а не перерисовывать его каждый раз как я это делаю. Хэлпните, если сможете.

Старый 01.11.2011, 13:54
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 2  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Сначала добавь прогрессбар на экран, а потом меняй ему scaleX таким образом:

Код AS3:
private function onProgressLoader(event:ProgressEvent):void {
	var loaded:Number = event.bytesLoaded;
	var total:Number = event.bytesTotal;
	_progress_bar_line.scaleX = loaded / total;
}
__________________
Нормально делай — нормально будет!


Последний раз редактировалось tsarapkabel; 01.11.2011 в 14:01.
Старый 01.11.2011, 13:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Надо было показать код, в котором "объект вовсе пропадает". Весь код, а не заведомо правильно написанное выражение. Кстати, почему +=1, независимо от количества байтов?))
2. В перерисоывании нет ничего плохого. Плохо зачем-то удалять прогрессбар, создавать снова. Зачем? Есть метод Graphics#clear(), а по сути и он тут не нужен – полоса ведь не может уменьшаться, можно тупо "наслаивать" поверх новый прямоугольник. Удалять то сам Шейп зачем?
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:15.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.