![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Добрый день, друзья!
Я сделал пример, в котором гружу из библиотеки 2 иконки, к которым прям в библиотеке и применил сглаживание. А третью иконку грузим лоадером, задаем ей параметры сглаживания, но увы ничего не получается. При движении одна иконка по прежнему "трясется" . Кому интересно, выкладываю исходник. вот такой код: package { import flash.display.Sprite; import flash.display.Bitmap; import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; public class Main extends Sprite { private static const SPEED_X:Number=30; private static const SPEED_Y:Number=60; private var _w:Number; private var _l1xpos:Number; private var _layer1; private var _stage; private var _p2; private var _p3; private var _sprite:Sprite; private var _iconLoader:Loader; private var _bitmap:Bitmap; 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); _stage = stage; _w=_stage.stageWidth; _layer1=new Full_tree(); _stage.addChild(_layer1); _layer1.x=stage.stageWidth/2; _layer1.y=stage.stageHeight; startMove();// начинаем движение объектов _sprite=new Sprite(); _layer1.i1.iIn.addChild(_sprite); _iconLoader=new Loader(); _iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, theSmoothing); _iconLoader.load(new URLRequest("persons/1/icon.jpg")); _p2=new P2(); _layer1.i2.iIn.addChild(_p2); _p3=new P3(); _layer1.i3.iIn.addChild(_p3); } private function theSmoothing(evt:Event):void { _bitmap = Bitmap(_iconLoader.content); _bitmap.smoothing = true; _sprite.addChild(_bitmap); } private function startMove():void { _stage.addEventListener(Event.ENTER_FRAME, checkMouse); } private function checkMouse(evt:Event):void { _l1xpos = _w/2-(_stage.mouseX-_w/2); _layer1.x +=(_l1xpos-_layer1.x)/SPEED_X; } } } |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 110
|
Интересно. Даже так не работает:
private function theSmoothing(evt:Event):void { _bitmap = Bitmap(_iconLoader.content); var bData:BitmapData = new BitmapData(100,100); bData.draw(_bitmap); var bitmap:Bitmap = new Bitmap(bData, "never", true); _sprite.addChild(bitmap); addEventListener(Event.ENTER_FRAME, checkMouse); } Этот smoothing только для изменения размеров годится, но не для анимации. Последний раз редактировалось hartman; 20.07.2010 в 19:58. |
|
|||||
|
ветеран форума
|
вот так правильнее
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 110
|
pixelSnapping я пробовал выше: new Bitmap(bData, "never", true);
А вот способ, который предложил Mur4ik, действительно работает. Как и обещано в описании метода beginBitmapFill: smooth:Boolean (default = false) — If false, upscaled bitmap images are rendered by using a nearest-neighbor algorithm and look pixelated. If true, upscaled bitmap images are rendered by using a bilinear algorithm. Rendering by using the nearest neighbor algorithm is usually faster. smoothing помогает только при масштабировании битмапа. |
|
|||||
|
Спасибо, очень помогли!
Только появилась другая проблема, первые иконки не загружаются, а загружается только самая последняя _sprite=new Sprite(); _layer1.i1.iIn.addChild(_sprite); _iconLoader=new Loader(); _iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, theSmoothing); _iconLoader.load(new URLRequest("persons/1/icon.jpg")); _sprite=new Sprite(); _layer1.i2.iIn.addChild(_sprite); _iconLoader=new Loader(); _iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, theSmoothing); _iconLoader.load(new URLRequest("persons/2/icon.jpg")); _sprite=new Sprite(); _layer1.i3.iIn.addChild(_sprite); _iconLoader=new Loader(); _iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, theSmoothing); _iconLoader.load(new URLRequest("persons/3/icon.jpg")); Добавлено через 41 минуту неужели на каждую иконку необходимо создавать индивидуальный Loader и Bitmap? _sprite=new Sprite(); _layer1.i1.iIn.addChild(_sprite); _iconLoader=new Loader(); _iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, theSmoothing); _iconLoader.load(new URLRequest("persons/1/icon.jpg")); function theSmoothing(evt:Event):void { var _bitmap:Bitmap = new Bitmap(); _bitmap = _iconLoader.content as Bitmap; _sprite.graphics.beginBitmapFill(_bitmap.bitmapData, null, false, true); _sprite.graphics.drawRect(0, 0, _bitmap.width, _bitmap.height); _sprite.graphics.endFill(); } var _sprite2=new Sprite(); _layer1.i2.iIn.addChild(_sprite2); var _iconLoader2=new Loader(); _iconLoader2.contentLoaderInfo.addEventListener(Event.COMPLETE, theSmoothing2); _iconLoader2.load(new URLRequest("persons/2/icon.jpg")); function theSmoothing2(evt:Event):void { var _bitmap2:Bitmap = new Bitmap(); _bitmap2 = _iconLoader2.content as Bitmap; _sprite2.graphics.beginBitmapFill(_bitmap2.bitmapData, null, false, true); _sprite2.graphics.drawRect(0, 0, _bitmap2.width, _bitmap2.height); _sprite2.graphics.endFill(); } |
|
|||||
|
ветеран форума
|
используйте один Loader и один Bitmap и один обработчик окончания загрузки
private function theSmoothing(evt:Event):void { _bitmap = evt.currentTarget.loader.content as Bitmap; _sprite.graphics.beginBitmapFill(_bitmap.bitmapData.clone(), null, false, true); _sprite.graphics.drawRect(0, 0, _bitmap.width, _bitmap.height); _sprite.graphics.endFill(); _bitmap.bitmapData.dispose(); _bitmap = null; }
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
|
тогда подгружается самая последняя картинка
|
|
|||||
|
ветеран форума
|
Грузите следующую после загрузки предыдущей, т.е. в том же theSmoothing запускайте загрузку следующей иконки. Или создавайте кучу лоадеров и всего одного обработчика theSmoothing последнего варианта для них будет достаточно.
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
|
а если картинка не загружается с сервера, загружается из библиотеки? Вот например:
_stars=new Stars(); _stage.addChild(_stars); _stars.x=_w/2; _stars.y=300; _stars.contentLoaderInfo.addEventListener(Event.COMPLETE, theStars); function theStars(evt:Event):void { var _bitmapStars:Bitmap=new Bitmap(); _bitmapStars=_stars.content as Bitmap; _stars.graphics.beginBitmapFill(_bitmapStars.bitmapData, null, false, true); _stars.graphics.drawRect(0, 0, _bitmapStars.width, _bitmapStars.height); _stars.graphics.endFill(); } |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:49. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| параметры , при движении , сглаживание |
| Опции темы | |
| Опции просмотра | |
|
|