画像の一部表示について
投稿者 : sha(em114-49-27-76.pool.e-mobile.ne.jp)
- 2013/07/31(Wed) 02:11
No.13631
|
|
|
|
|
題名と若干意味が異なるかもしれないのですが、一定座標から一定座標までにオブジェクトを移動(ループ)させつづけたいのです。 その際、一定座標からはみ出た部分は見えないようにしたいのですが、どうすればいいのでしょうか。 ちなみに訳あってzOrderは使えません。 作ろうとしているのはスロットです。
なかなかアイデアが思いつかず、手につきません。 回答お願いします><
|
Re:画像の一部表示について
投稿者 : リセッタ(em114-48-173-216.pool.e-mobile.ne.jp)
- 2013/08/01(Thu) 23:25
No.13632
|
|
|
|
ドラム部分のマスク用筐体画像のキャラを作成。 ドラム用キャラより、zOrderを小さくしてドラムに被せる。
筐体画像例)
□□□□□□□□□□□□ □透明色 □■■■■■■■■■■□ ■不透明色 □■■■■■■■■■■□ □■□□■□□■□□■□ □■□□■□□■□□■□ □■□□■□□■□□■□ □■■■■■■■■■■□ □■■■■■■■■■■□ □□□□□□□□□□□□
って zOrder 使えない? なんで?訳有ってじゃなくて理由を言ってほしいね。 それによってはやり方が変わると思うし。$Panelやpanelオブジェクトに描画かな? ん〜中間パネルにドラム描画後、表示したい分だけ"copyRect()"メソッドで移すてのはどう?
|
Re: 画像の一部表示について
投稿者 : sha(em114-49-29-243.pool.e-mobile.ne.jp)
- 2013/08/02(Fri) 14:16
No.13633
|
|
|
|
回答有難うございます。 zOrderが使えないと思ってる理由は、九つのリール全てが回る仕組みにしようとしているので、枠がこんな感じなのです。
□□□□□□□□□□□□ □透明色 □■■■■■■■■■■□ ■不透明色 □■□□■□□■□□■□ □■□□■□□■□□■□ □■■■■■■■■■■□ □■□□■□□■□□■□ □■□□■□□■□□■□ □■■■■■■■■■■□ □■□□■□□■□□■□ □■□□■□□■□□■□ □■■■■■■■■■■□ □□□□□□□□□□□□
その為、自分の考えでは、zOrderでやろうとすると、どれかしらの場所に優先されている画像が、めり込んでしまうと思うからです。
"copyRect()"メソッドを使って出来るかやってみます。 ありがとうございました。
|
Re: 画像の一部表示について
投稿者 : リセッタ(em114-49-15-42.pool.e-mobile.ne.jp)
- 2013/08/02(Fri) 20:54
No.13634
|
|
|
|
枠画像の'zOrder'を'-500'とかにして最前面にして、 リールは0以上の値で対応じゃだめなの?
>zOrderが使えないと思ってる理由は、九つのリール全てが回る仕組み… >その為、自分の考えでは、…どれかしらの場所に優先されている画像が、めり込んでしまう…
zOrderは3次元での奥行き(Z軸)になり、値が大きい程奥にオブジェクトが居る様に表示されます。 zOrderが同じ値の場合に被る様にあるオブジェクトの場合、表示は、実行順序等により予測不能です。 (どちらが手前に表示されるか?表示の一部もしくは全部が失われるか等。試してみて) zOrderが異なる値ならば。小さい値のオブジェクトが手前に必ず表示されます。
>どれかしらの場所に優先されている画像が、めり込んでしまう この場合の優先されている画像が、マスク用の”枠画像”で、一番手前にするわけです。(zOrder=-500) リール用キャラは、その奥にします。(zOrder=0〜,未設定(null値=0)でも可)
#おまけ リール回転デモ
zOrder :リール・キャラソース(例 -500 0 1 2 3 4 scaleY :extends DxChar; // 高さ32ドットのキャラ10個で回転 | ・ 0.1 :yo=100; yr=50; // yo;表示中心 yr:リール半径(ドット) | |←| :while(1) { // yr=32*10/2π≒50 間隔=360/10=36° : | | 0.7 : yd=cos(yt); ym=sin(yt); // yd:縮尺(源) ym:表示位置差分 : | | : scaleY=abs(yd); // 縮尺設定 : |↓ |↑ 1.0 : if(yd<0.2) setVisible(0); else setVisible(1); // 不要部分非表示 ※1 : | | : zOrder=yr-floor(yr*yd); // zOrder設定。要らないかも(^ ^;A : | | 0.7 : y=yo+ym*yr; // 表示位置設定 | |→| : yt=(yt+5)%360; // 5°回転させる。(360°以内に収める) ※2 | ・ 0.1 : update(); // ※1 裏側&縁部分(±78°≒$Math.acos(0.2)以上) 枠 リール・キャラ :} // ※2 回転する角度を大きくすれば速く、小さくすれば遅く廻る。 オブジェクト群 :
リールキャラを縦に六つくらいコピぺして、 36°空けて(インスペクタでytに0,36,72.108…を入れて) F9押下 廻ってる様に見えると思うけど…
|
Re:画像の一部表示について
投稿者 : リセッタ(em114-49-15-42.pool.e-mobile.ne.jp)
- 2013/08/03(Sat) 01:45
No.13635
|
|
|
|
13635.lzh
上記おまけのプログラムです。
>どれかしらの場所に優先されている画像が、めり込んでしまう あ〜、リール径が大きくて、上下で重なるって事かな? 大まかに不要部分の非表示を行って、枠できっちりマスクすればOK。
イメージ | :/ ̄ ̄ ̄\ if(yd<0.2) └…………/: \ setVisible(0); | : | else | : ・ | setVisible(1); | : | ┌…………\: ___ / 上記の判定の"0.2"を | :× × 調整して、非表示にする └…………/:  ̄ ̄ ̄ \ (値を大きくすると、 | : | 表示される部分は小さく | : ・ | 値を小さくすると、 | ; | 表示部分は大きくなる。 ┌…………\: / 0〜1を指定。 | :\___/ 表示範囲≒2*(1-判定値)*yr+α | : キャラの高さ分大きめ?) 枠 表示 ← : → 非表示
|
Re: 画像の一部表示について
投稿者 : sha(em1-112-113-13.pool.e-mobile.ne.jp)
- 2013/08/04(Sun) 20:29
No.13636
|
|
|
|
ご丁寧にプログラムの見本をありがとうございます。 試行錯誤した結果、やはりcopyRect()を使えれば最適という結論に至りました。 ただ、初歩的な質問になってしまうのですが、ヘルプを読んでもcopyRect()の使い方がイマイチ分かりません。
extends PanelChar;//リールの全画像 resize(300,2327); while(1){ panel.drawSprite(200,2065,$pat_lille2+0); update(); }
extends PanelChar;//一つ目のリール resize(300,300); while(1){ panel.copyRect(0,0,200,200,$lille,0,0,200,200); update(); }
これで一つ目のリールにリールの全画像の一部が表示されません。何が間違っているのでしょうか。
|
Re: 画像の一部表示について
投稿者 : sha(em1-112-113-13.pool.e-mobile.ne.jp)
- 2013/08/04(Sun) 20:56
No.13637
|
|
|
|
上のソースは古いコードでした 正しくは↓です。リールの全画像のクラスは$lilleです。
extends PanelChar;//一つ目のリール resize(300,300); while(1){ panel.copyRect(0,0,200,200,$lille.Panel,0,0,200,200); update(); }
|
Re: 画像の一部表示について
投稿者 : sha(em114-49-10-164.pool.e-mobile.ne.jp)
- 2013/08/04(Sun) 21:18
No.13638
|
|
|
|
すいません、panelで画像を貼り付けるときの位置を、正確に理解していなかったので発生したみたいです。 掲示板を汚してしまってすいませんでした。 回答ありがとうございました。
|
Re:画像の一部表示について
投稿者 : リセッタ(em1-112-122-48.pool.e-mobile.ne.jp)
- 2013/08/05(Mon) 03:48
No.13639
|
|
|
|
13639.lzh
リール表示用クラスのデモです。 ”Q”でスタート。 ”Z,X,C”でストップです。
|
|