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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
По умолчанию Текстуры после просмотра рекламы

Здравствуйте многоуважаемые коллеги.
У меня собственно вылез такой не приятный баг.
В моём апп, юзаю две рекламные площадки AdColony и AdMob, в точности видео-рекламу и межстраничный блок.
Баг заключается в том, что если сначало посмотреть видео-рекламу от AdColony, а после AdMob'овскую, то при заходе в апп, текстуры частично крешаться.

Нажмите на изображение для увеличения
Название: device-2015-07-06-171145.png
Просмотров: 157
Размер:	77.5 Кб
ID:	31703
Чёрные области, по обычному выглядят вот так
Нажмите на изображение для увеличения
Название: device-2015-07-06-173019.png
Просмотров: 153
Размер:	105.1 Кб
ID:	31704

Подскажите в какую сторону копать или поделитесь мыслями.

Вьюшка
Код AS3:
package ru.jumper.view.skin.components
{
	import com.greensock.TweenLite;
	import com.greensock.easing.Back;
 
	import flash.display.Bitmap;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.geom.Vector3D;
	import flash.utils.setTimeout;
 
	import ru.jumper.model.Hero;
	import ru.jumper.model.Member;
	import ru.jumper.model.configs.AssetGUI;
	import ru.jumper.model.events.PopupEvent;
	import ru.jumper.view.skin.InjectView;
	import ru.jumper.view.skin.world.PersonageGUI;
 
	import starling.animation.Transitions;
	import starling.core.Starling;
	import starling.display.DisplayObject;
	import starling.display.Image;
	import starling.display.Sprite;
	import starling.display.Sprite;
	import starling.events.Event;
	import starling.events.Touch;
	import starling.events.TouchEvent;
	import starling.events.TouchPhase;
	import starling.filters.BlurFilter;
	import starling.textures.Texture;
 
	public class SelectHeros extends InjectView
	{
		[Embed(source="/../../../../../asset/images/arrow.png")] private static var arrow_R:Class;
		[Embed(source="/../../../../../asset/images/arrow_l.png")] private static var arrow_L:Class;
		[Embed(source="/../../../../../asset/images/play_full_color.png")] private static var play_full_color:Class;
 
		private var factory:Factory;
 
		private var _Sprites:Vector.<Sprite>;
		private var radius:int;
 
		private var _view:Sprite;
		private var currentItem:int = 0;
		private var _fw:Number;
		private var _fh:Number;
		private var filt:BlurFilter;
		private var select:int;
		private var arrow_r:Sprite;
		private var arrow_l:Sprite;
		private var _activeHero:Sprite;
		private var _last:int = -1;
 
		public function SelectHeros()
		{
			super();
 
			factory = new Factory();
 
			_fw = inject.device.fullscreenWidth;
			_fh = inject.device.fullscreenHeight;
 
			radius = _fw*.5;
 
			_view = new Sprite;			
			addChild(_view);
 
			if (inject.member.active) {} else {}
 
			select = inject.member.hero;
 
			super.syncToStage( create );
 
		}
 
		private function create():void
		{
			showOne();
			createNavy();
		}
 
		private function showOne():void
		{
			activeHeros = inject.barracks[select]; 
 
			for ( var i:*=0; i<_view.numChildren; i++) {
 
				var last:* = _view.getChildAt(i);
 
				if (last.alpha==1) {
					Starling.juggler.tween(last, 1, {delay: .1, x:  -last.width , alpha:0, onComplete:smartClear, transition:Transitions.EASE_IN_OUT_BACK  });
				} else {
					Starling.juggler.tween(last, .5, {delay: .1, x:  -last.width , alpha:0, onComplete:smartClear  });
				}
			}
 
			var B:Sprite = factory.create(  PersonageGUI.getInstance().adapt(activeHeros.bitmapDataHero, .5) );
 
				B.x = _fw; 
				B.y = _fh*.3;
				B.alpha = 0;
 
			if ( inject.member.unlocked( activeHeros.type ) ) { 
				activeHeros.price = 0;
			}
 
			var prices:Sprite = factory.price(AssetGUI.getBitmapData(AssetGUI.ICON_CASH, 32),  activeHeros.price);
				prices.y = B.height+prices.height;
 
				B.addChild( prices );
 
			B.addEventListener( TouchEvent.TOUCH, mouseHandler );
 
			_view.addChild( B );
 
			Starling.juggler.tween(B, 1, {x:  _fw*.5 , alpha:1, transition:Transitions.EASE_IN_OUT_BACK  });
		}
 
		private function smartClear():void {
 
			var l:* = _view.getChildAt(0); 
			if (l.alpha==0) _view.removeChildAt(0).removeEventListener(TouchEvent.TOUCH, mouseHandler );
		}
 
		private function get blurFilter():BlurFilter {
			return new BlurFilter(5,5);
		}
 
		private var consx:Vector.<Point> = new Vector.<Point>();
		private var arrow_c:Point;
		private var _ankerC:Vector3D;
		private var play:Sprite;
		private var activeHeros:Hero;
 
		private function createNavy():void
		{
			var gui:PersonageGUI = PersonageGUI.getInstance();
 
			arrow_c = new Point( _fw*.05 ); 
 
			arrow_l = factory.create( gui.adapt(new arrow_L().bitmapData, .25 ) );
			arrow_l.x =  _fw*.2;
 
			arrow_r = factory.create( gui.adapt(new arrow_R().bitmapData, .25 ) );
			arrow_r.x = _fw-arrow_l.x;
 
			arrow_c = new Point( arrow_l.x, arrow_r.x);
 
			arrow_r.y =
			arrow_l.y = (_fh-arrow_l.height)*.5;
 
			arrow_l.addEventListener( TouchEvent.TOUCH, mouseHandler );
			arrow_r.addEventListener( TouchEvent.TOUCH, mouseHandler );
 
			addChild( arrow_r );
			addChild( arrow_l );			
		}
 
		private function mouseHandler(e:TouchEvent):void
		{
			var touch:Touch = e.getTouch(this, TouchPhase.BEGAN);
 
			if (!touch) return;
 
 
			if (arrow_l.alpha<1 || arrow_r.alpha<1) return;
 
			switch (e.currentTarget) {
 
				case arrow_l:	
					select--;
					Starling.juggler.tween(arrow_l, 0.1, {x: arrow_c.x-_fw*.1, alpha: 0});
					Starling.juggler.tween(arrow_l, 0.1, {x: arrow_c.x, delay:.5, alpha: 1});
				break;
 
				case arrow_r:
					select++;
					Starling.juggler.tween(arrow_r, 0.1, {x: arrow_c.y+_fw*.1, alpha: 0});
					Starling.juggler.tween(arrow_r, 0.1, {x: arrow_c.y, delay:.5, alpha: 1});
				break;
 
				default:
 
					var ttype:String = inject.barracks[select].type;
 
					if (inject.member.unlocked( ttype )) {
						inject.member.hero = select;
 
						new Hero( ttype );
 
						inject.dispatchEvent( new PopupEvent( PopupEvent.PRELOADER, 'Loading', 'Please wait...', inject.startGame ) );
 
					} else {
 
						if (inject.barracks[select].price<= inject.member.cash) {
							inject.dispatchEvent( new PopupEvent( PopupEvent.APPROVE, 'Buy Hero', 'Cost: '+inject.barracks[select].price, buy ) );
						} else {
							inject.dispatchEvent( new PopupEvent( PopupEvent.APPROVE, 'Buy Premium Version', "All Hero UNBLOCKED\nNo Advertising", openPremium ) );
						}
					}
 
					return;
					break;
			}
 
			if (select<0) select = inject.barracks.length-1;
			if (select>= inject.barracks.length) select = 0;
 
			showOne();
		}
 
		private function openPremium():void
		{
			trace('openPremium');
		}
 
		private function buy():void {
			if (inject.barracks[select].price<= inject.member.cash) {
				inject.member.cash -= inject.barracks[select].price; 
 
				inject.member.buy( inject.barracks[select].type );
 
				inject.save();
 
				showOne()
			} 
		}
 
		private function show():void
		{
			if (_last != select) {
 
				if (_last!=-1) {
 
					Starling.juggler.tween(_Sprites[_last].filter, 0.5, { blurX: blurFilter.blurX, blurY: blurFilter.blurY , transition:Transitions.EASE_IN });
					Starling.juggler.tween(_Sprites[_last] , 0.5, {z:0,x: consx[_last].x,y: consx[_last].y,transition:Transitions.EASE_IN });	
				}
 
				_last = select;
 
				 _activeHero = _Sprites[select];
 
				_view.setChildIndex(_activeHero,_Sprites.length-1);
 
				Starling.juggler.tween(_activeHero.filter, 0.5, { blurX: 0, blurY: 0 , transition:Transitions.EASE_IN });
 
				 _ankerC = _view.globalToLocal3D(new Point((_fw-_activeHero.width)*.5 , (_fh-_activeHero.height)*.5));
			}
		}
	}
}
 
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;
 
import ru.jumper.model.configs.AssetGUI;
 
import starling.display.Image;
import starling.display.Sprite;
import starling.text.TextField;
import starling.textures.Texture;
import starling.utils.Color;
import starling.utils.HAlign;
import starling.utils.VAlign;
 
internal class Factory {
 
	public function Factory() {
 
	}
 
	public function create(asset:BitmapData, offset:Point = null):Sprite {
 
		if (offset==null) offset = new Point();
 
		var texture:Texture = Texture.fromBitmap(new Bitmap(asset));
 
		var img:Image = new Image(texture);
			img.x = offset.x-.5*img.width;
 
		var comp:Sprite = new Sprite();
			comp.addChild( img );
 
		return comp;
	}
 
	public function price(asset:BitmapData,price:Number,width:Number=100):Sprite
	{
		var comp:Sprite = new Sprite();
		var texture:Texture;
		var img:Image;
		var size:Number = 36;
 
		if (price) {
 
			texture = Texture.fromBitmap(new Bitmap(asset));
 
			img = new Image(texture);
			img.x = -img.width*.5;
 
		var t:TextField = new TextField(width,size,price.toString(), AssetGUI.FONT_DEFAULT, size-8, Color.rgb(0xff,0xff, 0xff) );
			t.hAlign = HAlign.LEFT;  
			t.vAlign = VAlign.CENTER;
			t.x = img.width;
 
		var r:TextField = new TextField(width,size,'BUY', AssetGUI.FONT_DEFAULT, size-8, Color.rgb(0xff,0xff, 0xff) );
			r.hAlign = HAlign.RIGHT;  
			r.vAlign = VAlign.CENTER;
			r.x = -img.width-r.width;
 
 
 
			comp.addChild( img );
			comp.addChild( t );
			comp.addChild( r );
 
		} else {
			var play:TextField = new TextField( width,size,'PLAY', AssetGUI.FONT_DEFAULT, size-8, Color.rgb(0xff,0xff, 0xff) );
				play.hAlign = HAlign.CENTER;
				play.vAlign = VAlign.CENTER;
 
				play.x = -play.width*.5;
			comp.addChild( play );
		}
 
		return comp;
	}
}
__________________
return this...

Старый 06.07.2015, 20:20
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
handleLostContext true?
__________________
Поймай яблоко 2!

Старый 06.07.2015, 21:07
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 3  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Zebestov Посмотреть сообщение
Да, а нужен?
Код AS3:
public function enable(stage:Stage, view:Class):void {
			Debug.log( 'StarlingService enable');
			if (!_starling) {
 
				Starling.handleLostContext = true;
				Starling.multitouchEnabled = true;
 
				_starling = new Starling(view, stage);
 
				_starling.addEventListener(starling.events.Event.ROOT_CREATED, onStarlingEvent);
				_starling.addEventListener(starling.events.Event.CONTEXT3D_CREATE, onStarlingEvent);
				_starling.addEventListener(starling.events.Event.FATAL_ERROR, onStarlingEvent);
 
				_starling.simulateMultitouch = true;
				_starling.antiAliasing = 0;
				_starling.showStats = true;
				_starling.enableErrorChecking = false;
				_starling.start();
 
				this.stage = stage;
 
				stage.addEventListener(flash.events.Event.RESIZE, stage_resizeHandler, false, int.MAX_VALUE, true);
				stage.addEventListener(flash.events.Event.DEACTIVATE, stage_deactivateHandler, false, 0, true);
			}
		}
__________________
return this...

Старый 06.07.2015, 21:18
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
На iOS не, на Android да (если ничего не поменялось).
А такое имеется?
Код AS3:
NativeApplication.nativeApplication.addEventListener(flash.events.Event.DEACTIVATE, onStageDeactivate);
NativeApplication.nativeApplication.addEventListener(flash.events.Event.ACTIVATE, onStageActivate);
А там соответственно stop(true) и start().
__________________
Поймай яблоко 2!

Старый 06.07.2015, 21:20
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 5  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Код AS3:
protected function stage_deactivateHandler(event:flash.events.Event):void
		{
			_starling.stop();
 
			this.stage.addEventListener(flash.events.Event.ACTIVATE, stage_activateHandler, false, 0, true);
		}
 
		protected function stage_activateHandler(event:flash.events.Event):void
		{
			this.stage.removeEventListener(flash.events.Event.ACTIVATE, stage_activateHandler);
			_starling.start();
		}
Добавлено через 30 секунд
иль добавить
Код AS3:
_starling.stop(true);
__________________
return this...

Старый 06.07.2015, 21:25
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 6  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Попробуй. Я про этот start/stop в мануалах какого-то Leadbolt-а вычитал. Особо не разбирался. Вставил в код — и проблем не было. Но у меня там и текстур было кот наплакал.
__________________
Поймай яблоко 2!

Старый 06.07.2015, 21:46
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 7  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Увы, но не сработало. Ошибка стабильная. Попробую собрать лайт-версию и повторить.
__________________
return this...

Старый 06.07.2015, 21:53
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 8  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Тогда не подскажу. Теоретически должно работать, потому что в доках старлинга сказано, что он сам кеширует и восстанавливает контекст при потере.
Можно еще попробовать пожонглировать версиями: старлинга, air.
__________________
Поймай яблоко 2!

Старый 07.07.2015, 01:34
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 9  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Сменил старлинг с 1.6 на 1.7, трабла ушла, но увы, не моё беспокойство. Каким образом эт можно отследить? В голову приходит обработчик событий flash.events.Event.ACTIVATE, который проганяется по вьюшкам, и смотрит, нет ли там картин Малевича.

Добавлено через 8 минут
Странно но факт
Код AS3:
_starling.enableErrorChecking = false;
возвращает траблу
в то время как
Код AS3:
_starling.enableErrorChecking = true;
её фиксит

Добавлено через 9 минут
Думаю, дело в gs.
__________________
return this...

Старый 07.07.2015, 02:04
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 10  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Если бы это был Dusplay List и у тебя в дизайне совершенно не было бы черного цвета, можно было бы проверить ненулевое значение нулевых элементов (пардон за каламбур) в первых трех векторах гистограммы "слепка" сцены — это означало бы, что есть черные пиксели.

Но со Stage3D вот так "в лоб" дороговато будет — он долго буфер в битмадату рисует.
__________________
Поймай яблоко 2!

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

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

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


 


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


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