![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2011
Сообщений: 29
|
Добрый всем день и с Рождеством Вас!!! Тема для опытных, сразу скажу, что нужна помощь в дописании кода.
Вобщем идея тут такая TextField, делаем нексколько битмапов в том числе и с TextField-а и далее рассыпаем их на частицы. как это выглядет можно посмотреть тут: http://wonderfl.net/c/879Y#_=_ В общем думаю вместо TextField использовать клип из библиотеки. Для этого я его создаю как кслас и потом вызываю var myP: snowy = new snowy(); Также потом его прописываю тут: _textBmp.draw(_text, mtx); только вместо _text пишу myP. В результате пусто(( Пока решил сделать шрифт со своей фигурой вместо клипа которую надо рассыпать - но почему то, когда прописываю _text.embedFonts = true; - все снова проподает. Прошу посмотрите кто опытным взглядом - в чем тут суть? Создается матрица из пикселей по TextFiedl-у но почему она не воспринимает клип как форму? В общем я только начал читать Колина Мука, по этому остро нуждаюсь в вашей помощи! Спасибо! package { import flash.display.MovieClip; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.PixelSnapping; import flash.display.Sprite; import flash.events.Event; import flash.filters.BlurFilter; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; [SWF(width=521, height=507, backgroundColor=0x2, frameRate=25)] public class Snow extends Sprite { private static const WIND_X:Number = -0; private static const WIND_Y:Number = 40; private static const GRAVITY:Number = 20; private static const START_Y:Number = 200; private var _canvas:BitmapData; private var _textBmp:BitmapData; private var _glow:BitmapData; private var _glowMtx:Matrix; private var _snow:Array; private var _snow_prepare:Array; private var _text:TextField; //private var _text2:TextField; //private var _log:TextField; private var myFormat:TextFormat = new TextFormat( "Untitled-Regular"); var tf:TextFormat = new TextFormat( "Untitled-Regular", 148 ); var myP: snowy = new snowy(); public function Snow() { myFormat.font = myFont.fontName;//"Untitled-Regular"; myFormat.size = 148; myFormat.color = 0xffffff; myP.x = 110; myP.y = 110; _text = new TextField(); _text.embedFonts = false; _text.defaultTextFormat = myFormat;// new TextFormat('Untitled-Regular', 10, 0xffffff, true); _text.text = " A"; _text.autoSize = "left"; //_text.antiAliasType = AntiAliasType.NORMAL; //this.addChild(_text2); _textBmp = new BitmapData(700, 525, false, 0x000000); this._canvas = new BitmapData(700, 525, false, 0x000000); //this.addChild(new Bitmap(_textBmp)); this.addChild(new Bitmap(this._canvas)); this._snow = []; this._snow_prepare = []; this._glow = new BitmapData(700 / 4, 525 / 4, false, 0x0); var bm:Bitmap = this.addChild(new Bitmap(this._glow, PixelSnapping.NEVER, true)) as Bitmap; // smoothing bm.scaleX = bm.scaleY = 4; bm.blendMode = BlendMode.ADD; this._glowMtx = new Matrix(0.25, 0, 0, 0.25); addChild(myP); // init _snow_prepare this.addEventListener(Event.ENTER_FRAME, function(event:Event):void{ for(var i:int = 0; i < 23; i++){ if(_snow_prepare.length){ var index:int = Math.random() * Math.min(30, _snow_prepare.length); var particle:SnowParticle = _snow_prepare[index]; _snow_prepare.splice(index, 1); _textBmp.setPixel(particle.x, particle.y, 0x000000); // Color AFTER EFFECT _snow.push(particle); } } if(_snow_prepare.length || _snow.length){ update(null); }else{ init(); } }); init(); } public function init():void{ var mtx:Matrix = new Matrix(); mtx.ty = START_Y; _textBmp.draw(_text, mtx); var rect:Rectangle = _textBmp.getColorBoundsRect(0, 0, false); for(var x:int = rect.left; x <= rect.right; x++){ for(var y:int = rect.top; y <= rect.bottom; y++){ var col:uint = _textBmp.getPixel(x, y); if(col != 0x000000){ _snow_prepare.push(new SnowParticle(x, y, col, Math.random(), -Math.random())); } } } _snow_prepare.sort(function(a:SnowParticle, b:SnowParticle):int{ var _a:int = a.x + a.y * 3; var _b:int = b.x + b.y * 3; return _a > _b ? 1 : _a == _b ? 0 : -1; }); } // 雪を動かすよーー public function update(e:Event):void { this._canvas.lock(); // いっぱい setPixel するときは必ず lock しよう this._canvas.fillRect(this._canvas.rect, 0x0); // カンバスをクリア this._canvas.copyPixels(_textBmp, _textBmp.rect, new Point(0, 0)); var n:int = this._snow.length; var d:Number = 1.0; var wind_x:Number = (Math.random() > .4 ? WIND_X : 0) / 1000; var wind_y:Number = (GRAVITY + (Math.random() > .6 ? WIND_Y : WIND_Y / 2)) / 1000; while (n--) { var p:SnowParticle = this._snow[n]; p.vx += wind_x * p.s; p.vy += wind_y * p.s; p.vx *= 0.99; p.vy *= 0.99; p.x += p.vx; p.y += p.vy; this._canvas.setPixel(p.x, p.y, p.c); if (p.y < 0 || p.y > this.stage.stageHeight || p.x > this.stage.stageWidth) { this._snow.splice(n, 1); } } this._canvas.unlock(); this._glow.draw(this._canvas, this._glowMtx); } } } class SnowParticle { public var x:Number; public var y:Number; public var vx:Number; public var vy:Number; public var s:Number; public var c:int; public function SnowParticle(x:Number, y:Number, color:uint, vx:Number, vy:Number) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.s = 1; this.c = color; } } как сейчас работает: http://vasilevich.by/preview/Snow.swf Добавлено через 59 минут Исходник: http://vasilevich.by/preview/Snow.rar Не забудьте прописать в Action Script settings -> source path |
|
|||||
|
Ау - есть кто живой?
![]() |
|
|||||
|
я, например, не вижу где вы свой клип вместо исходного ТФ вставляете..соответственно, сказать где тут ошибка проблематично.
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 29
|
Пробую так:
private var _text:snowy = new snowy(); а snowy это клип в библиотеке Появляется отрисованая битмапа по моему клипу но не рассыпается. Не знаю что делать - шрифт не встраивается никак тоже, но это уже другая тема. В исходнике я оставил TextField, чтобы сходу было видно - как действует этот код. |
|
|||||
|
оформите это все в обособленный, готовый к применению код и покажите..из ваших фрагментов не очень понятно когда и где вы что меняете.
Добавлено через 1 час 5 минут что-то типа // forked from ayuzak's forked from: Hello Snow!!! // forked from nitoyon's Hello Snow!!! // Hellow Snow!!! // forked from Saqoosha's Snow package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.MovieClip; import flash.display.PixelSnapping; import flash.display.Sprite; import flash.events.Event; import flash.filters.BlurFilter; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; [SWF(width=465, height=465, backgroundColor=0x0, frameRate=120)] public class Main extends Sprite { private static const WIND_X:Number = 0; private static const WIND_Y:Number = 100; private static const GRAVITY:Number = 50; private static const START_Y:Number = 200; private var _canvas:BitmapData; private var _textBmp:BitmapData; private var _glow:BitmapData; private var _glowMtx:Matrix; private var _snow:Array; private var _snow_prepare:Array; private var _myMC:MovieClip; private var _log:TextField; public function Main() { stage.scaleMode = "noScale"; _myMC = new MovieClip(); // тут вместо мувиклипа создаете свой из библиотеки /* соотв. не нужна графика, которая ниже..это просто для примера*/ _myMC.graphics.beginFill(0x999999, 1); _myMC.graphics.drawRect(0, 0, 65, 65); _myMC.graphics.endFill(); _textBmp = new BitmapData(465, 465, false, 0x000000); this._canvas = new BitmapData(465, 465, false, 0x000000); //this.addChild(new Bitmap(_textBmp)); this.addChild(new Bitmap(this._canvas)); this._snow = []; this._snow_prepare = []; this._glow = new BitmapData(465 / 4, 465 / 4, false, 0x0); // キラキラを描く用のん。カンバスの 4 分の 1 のサイズ var bm:Bitmap = this.addChild(new Bitmap(this._glow, PixelSnapping.NEVER, true)) as Bitmap; // smoothing を true にして配置 bm.scaleX = bm.scaleY = 4; // 4 倍にする。 bm.blendMode = BlendMode.ADD; // 加算モードで合成 this._glowMtx = new Matrix(0.25, 0, 0, 0.25); // init _snow_prepare this.addEventListener(Event.ENTER_FRAME, function(event:Event):void{ for(var i:int = 0; i < 50; i++){ if(_snow_prepare.length){ var index:int = Math.random() * Math.min(30, _snow_prepare.length); var particle:SnowParticle = _snow_prepare[index]; _snow_prepare.splice(index, 1); _textBmp.setPixel(particle.x, particle.y, 0x000000); _snow.push(particle); } } if(_snow_prepare.length || _snow.length){ update(null); }else{ init(); } }); init(); } public function init():void{ var mtx:Matrix = new Matrix(); _myMC.x = START_Y; _myMC.y = START_Y; mtx.ty = _myMC.y; mtx.tx = _myMC.x; _textBmp.draw(_myMC, mtx); var rect:Rectangle = _myMC.getBounds(this); for(var x:int = rect.left; x <= rect.right; x++){ for(var y:int = rect.top; y <= rect.bottom; y++){ var col:uint = _textBmp.getPixel(x, y); if(col != 0x000000){ _snow_prepare.push(new SnowParticle(x, y, col, Math.random(), -Math.random())); } } } _snow_prepare.sort(function(a:SnowParticle, b:SnowParticle):int{ var _a:int = a.x + a.y * 3; var _b:int = b.x + b.y * 3; return _a > _b ? 1 : _a == _b ? 0 : -1; }); } // 雪を動かすよーー public function update(e:Event):void { this._canvas.lock(); // いっぱい setPixel するときは必ず lock しよう this._canvas.fillRect(this._canvas.rect, 0x0); // カンバスをクリア this._canvas.copyPixels(_textBmp, _textBmp.rect, new Point(0, 0)); var n:int = this._snow.length; var d:Number = 1.0; var wind_x:Number = (Math.random() > .4 ? WIND_X : 0) / 1000; var wind_y:Number = (GRAVITY + (Math.random() > .6 ? WIND_Y : WIND_Y / 2)) / 1000; while (n--) { var p:SnowParticle = this._snow[n]; p.vx += wind_x * p.s; p.vy += wind_y * p.s; p.vx *= 0.99; // 空気抵抗 p.vy *= 0.99; // y 方向にも p.x += p.vx; // 動かす p.y += p.vy; this._canvas.setPixel(p.x, p.y, p.c); // 雪 1 粒描く if (p.y < 0 || p.y > this.stage.stageHeight || p.x > this.stage.stageWidth) { // もし画面外にでちゃったら this._snow.splice(n, 1); // とりのぞく } } this._canvas.unlock(); // lock したやつは必ず unlock this._glow.draw(this._canvas, this._glowMtx); // キラキラを描く } } } class SnowParticle { public var x:Number; public var y:Number; public var vx:Number; public var vy:Number; public var s:Number; public var c:int; public function SnowParticle(x:Number, y:Number, color:uint, vx:Number, vy:Number) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.s = 1; this.c = color; } }
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью Последний раз редактировалось cleptoman; 26.12.2011 в 17:20. |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 29
|
Бог ты МОЙ!!!! Есть же люди на белом свете!! Спасибо огромное - работает!! Я уж думал капец мне сегодня!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:50. |
|
|
« Предыдущая тема | Следующая тема » |
|
|