[AS]Progressinで「at jp.progression.casts::CastPreloader/set contextMenu()」なエラーがでたときの(とりあえずな)対処法
Progressionを使ってこんなエラーに遭遇。
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません
at jp.progression.casts::CastPreloader/set contextMenu()
at com.courservector.flashbug::Profiler/allCompleteHandler()
詳しく検証してないからわかってることだけとりあえず箇条書き
- FlashPlayerがデバッグプレイヤーのときだけ発生
(普通のプレイヤーでは発生しない) - FireFoxで、かつFireBugとFlashBugが入ってるときに発生
- FireBugとFlashBugを無効化するとエラーはでなくなる
(このときPCを再起動する必要があった) - 無効化してからもいちど有効化したらエラーがでなくなった
(わけわかめ)
再現の規則性がよくわからんのでブラウザ(FF)とアドオンのバグなんじゃないかと推測。
とりあえずProgression側での対処法も書いておく
CastPreloader.asの431行目にあるsuper.contextMenu = menu;をコメントアウトすればOKっぽい。
(右クリックでProgressionのライセンス表記もでるし、とりあえず大丈夫っぽい)
抜粋したコードはだいたいこんな感じ
[
] //CastPreloader.asの428~431行目あたり // ContextMenu を作成する var menu:ContextMenu = new ContextMenu(); menu.hideBuiltInItems(); //■↓ここをコメントアウトする //super.contextMenu = menu;Tweet
[AS]画像をゆっくり動かす方法 その2
以前にも書いた内容についての補足です。
画像をゆっくり動かす方法
上のリンクを読んでもらうとわかるのですが、
画像をゆっくり動かすにはbeginBitmapFill()の第2引数のMatrixを使って位置を変更しながら毎フレーム描画する、
ということだったのですが、これだとあまり直感的でなくてちょっとめんどくさい。
↓のサイトを観たらもっと簡単にできました。
にゃあプロジェクト|[AS3.0] カルーセルに挑戦! (2)
要はShapeなりSpriteなりにbeginBitmapFill()を使って(smoothing=trueで)描画してしまえば、画像が描画されたShapeなりSpriteは0.1px刻みで動かしてもカクカクすることはないようです。
前回のスクリプトを例に修正すると、
package { import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Matrix; /** * ... * @author 393 */ //ライブラリに画像を用意し、クラス名Bmpでリンケージ。 //画像サイズは400×300 public class Main extends Sprite{ //private var matrix:Matrix = new Matrix(); private var bmp:BitmapData; private var sp:Sprite; //private var mx:Number = 0; //private var my:Number = 0; //private var w:Number; //private var h:Number; public function Main() { bmp = new Bmp(0, 0); sp = new Sprite(); addChild(sp); buttonMode = true; this.addEventListener(Event.ENTER_FRAME , xEnterFrame); //■追加:あらかじめspにBitmapDataを描画する。 sp.graphics.beginBitmapFill(bmp, null, false, true); sp.graphics.drawRect(0,0,bmp.width,bmp.height); } function xEnterFrame (e:Event):void { //mx += 0.05 //my += 0.05 //matrix.tx = mx; //matrix.ty = my; //sp.graphics.clear(); //smoothプロパティをtrueにするのがポイント //sp.graphics.beginBitmapFill(bmp, matrix,false,true); //sp.graphics.drawRect(mx, my, 400, 300); //sp.graphics.endFill(); //直接動かしてもカクカクしない sp.x += 0.05; sp.y += 0.05; } } }
こちらの方が直感的に使えていいですね。
Tweet