|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Текстуры после просмотра рекламы
Здравствуйте многоуважаемые коллеги.
У меня собственно вылез такой не приятный баг. В моём апп, юзаю две рекламные площадки AdColony и AdMob, в точности видео-рекламу и межстраничный блок. Баг заключается в том, что если сначало посмотреть видео-рекламу от AdColony, а после AdMob'овскую, то при заходе в апп, текстуры частично крешаться. Чёрные области, по обычному выглядят вот так Подскажите в какую сторону копать или поделитесь мыслями. Вьюшка 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... |
|
|||||
Lorem ipsum
|
handleLostContext true?
__________________
Поймай яблоко 2! |
|
|||||
Цитата:
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... |
|
|||||
Lorem ipsum
|
На iOS не, на Android да (если ничего не поменялось).
А такое имеется? А там соответственно stop(true) и start().
__________________
Поймай яблоко 2! |
|
|||||
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(); } иль добавить
__________________
return this... |
|
|||||
Lorem ipsum
|
Попробуй. Я про этот start/stop в мануалах какого-то Leadbolt-а вычитал. Особо не разбирался. Вставил в код — и проблем не было. Но у меня там и текстур было кот наплакал.
__________________
Поймай яблоко 2! |
|
|||||
Lorem ipsum
|
Тогда не подскажу. Теоретически должно работать, потому что в доках старлинга сказано, что он сам кеширует и восстанавливает контекст при потере.
Можно еще попробовать пожонглировать версиями: старлинга, air.
__________________
Поймай яблоко 2! |
|
|||||
Сменил старлинг с 1.6 на 1.7, трабла ушла, но увы, не моё беспокойство. Каким образом эт можно отследить? В голову приходит обработчик событий flash.events.Event.ACTIVATE, который проганяется по вьюшкам, и смотрит, нет ли там картин Малевича.
Добавлено через 8 минут Странно но факт возвращает траблу в то время как её фиксит Добавлено через 9 минут Думаю, дело в gs.
__________________
return this... |
|
|||||
Lorem ipsum
|
Если бы это был Dusplay List и у тебя в дизайне совершенно не было бы черного цвета, можно было бы проверить ненулевое значение нулевых элементов (пардон за каламбур) в первых трех векторах гистограммы "слепка" сцены — это означало бы, что есть черные пиксели.
Но со Stage3D вот так "в лоб" дороговато будет — он долго буфер в битмадату рисует.
__________________
Поймай яблоко 2! |
Часовой пояс GMT +4, время: 11:08. |
|
« Предыдущая тема | Следующая тема » |
|
|