動的におっぱい揉みたくて挑戦
結論から言うと重くて失敗
やってる事は、
・手が動いたら、
・手の影をGradientGlowFilterで生成
・その影を元にDisplacementMap計算
・おっぱいに適用
・手の影が変形後のおっぱいからはみ出さないように処理
上のFlashのように手の形が固定なら、上記手順の結構な箇所が省けるんですが
そのうち手の形も動的に変化させたいので、毎フレーム計算。
頑張って最初よりは軽くなったんだけど、両胸揉むのは厳しすぎると思ってここでギブアップ
影画像からDisplacementMap計算する際に参考にさせていただいたサイト
FACEs:某ゲームのようなエフェクト
とにかく二つ目のコードが神
結論から言うと重くて失敗
やってる事は、
・手が動いたら、
・手の影をGradientGlowFilterで生成
・その影を元にDisplacementMap計算
・おっぱいに適用
・手の影が変形後のおっぱいからはみ出さないように処理
上のFlashのように手の形が固定なら、上記手順の結構な箇所が省けるんですが
そのうち手の形も動的に変化させたいので、毎フレーム計算。
頑張って最初よりは軽くなったんだけど、両胸揉むのは厳しすぎると思ってここでギブアップ
影画像からDisplacementMap計算する際に参考にさせていただいたサイト
FACEs:某ゲームのようなエフェクト
とにかく二つ目のコードが神
取得したマウス座標をただ直線で結ぶだけのコードが
グルグルと線を描いてると、何故かどんどん重くなってカクカクになる。
//抜粋-----------------------------------------------------
private var dragStart:Point = null;
private function onMouseDown( e: MouseEvent ): void{
if( dragStart == null ){
dragStart = new Point( mouseX, mouseY );
}
}
private function onMouseMove( e: MouseEvent ): void{
if( dragStart ){
//draw
var g:Graphics = sp.graphics;
g.lineStyle( 4, 0x661111 );
g.moveTo( dragStart.x, dragStart.y );
g.lineTo( mouseX, mouseY );
dragStart.x = mouseX;
dragStart.y = mouseY;
}
}
private function onMouseUp( e: MouseEvent ): void{
dragStart = null;
}
//ここまで---------------------------------------------------------
原因分からず困る。
試しにgraphics.clear()を呼ぶと最初の軽い状態に戻るんで、SpriteかGraphics。
で、気が付く。
Spriteを拡大縮小回転しても綺麗なのは内部で描画したベクターのObject持ってるから。
それが多くなるのが原因?もしかして追加描画するたびに全ベクターデータを再描画している?
(結局そうなのかどうなのかは分からず)
リファレンスを探すとSprite.cacheAsBitmapと言うそれっぽい物があるんで、
これをtrueで解決!と思ったのにやっぱり変わらず・・・
Google先生で調べると、「変化が無かった時にキャッシュを使う」だけらしい。
結局上のコードはGraphicsで描いてはbmp.bitmapData.draw()することに。
//抜粋-----------------------------------------------------
private function onMouseMove( e: MouseEvent ): void{
if( dragStart ){
//draw
var tmpSp:Sprite = new Sprite();
var g:Graphics = tmpSp.graphics;
g.clear();
g.lineStyle( 4, 0x661111 );
g.moveTo( dragStart.x, dragStart.y );
g.lineTo( mouseX, mouseY );
dragStart.x = mouseX;
dragStart.y = mouseY;
bmp.bitmapData.draw( tmpSp );
}
}
//ここまで-----------------------------------------------------
解決したけど、なんかアホな事をしてる気がしてすっきりしない。
グルグルと線を描いてると、何故かどんどん重くなってカクカクになる。
//抜粋-----------------------------------------------------
private var dragStart:Point = null;
private function onMouseDown( e: MouseEvent ): void{
if( dragStart == null ){
dragStart = new Point( mouseX, mouseY );
}
}
private function onMouseMove( e: MouseEvent ): void{
if( dragStart ){
//draw
var g:Graphics = sp.graphics;
g.lineStyle( 4, 0x661111 );
g.moveTo( dragStart.x, dragStart.y );
g.lineTo( mouseX, mouseY );
dragStart.x = mouseX;
dragStart.y = mouseY;
}
}
private function onMouseUp( e: MouseEvent ): void{
dragStart = null;
}
//ここまで---------------------------------------------------------
原因分からず困る。
試しにgraphics.clear()を呼ぶと最初の軽い状態に戻るんで、SpriteかGraphics。
で、気が付く。
Spriteを拡大縮小回転しても綺麗なのは内部で描画したベクターのObject持ってるから。
それが多くなるのが原因?もしかして追加描画するたびに全ベクターデータを再描画している?
(結局そうなのかどうなのかは分からず)
リファレンスを探すとSprite.cacheAsBitmapと言うそれっぽい物があるんで、
これをtrueで解決!と思ったのにやっぱり変わらず・・・
Google先生で調べると、「変化が無かった時にキャッシュを使う」だけらしい。
結局上のコードはGraphicsで描いてはbmp.bitmapData.draw()することに。
//抜粋-----------------------------------------------------
private function onMouseMove( e: MouseEvent ): void{
if( dragStart ){
//draw
var tmpSp:Sprite = new Sprite();
var g:Graphics = tmpSp.graphics;
g.clear();
g.lineStyle( 4, 0x661111 );
g.moveTo( dragStart.x, dragStart.y );
g.lineTo( mouseX, mouseY );
dragStart.x = mouseX;
dragStart.y = mouseY;
bmp.bitmapData.draw( tmpSp );
}
}
//ここまで-----------------------------------------------------
解決したけど、なんかアホな事をしてる気がしてすっきりしない。
| ホーム |