| 
 | パネルオブジェクトについて
  投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp) - 2009/01/05(Mon) 11:32 
  No.12119
 |  | 
 |  | 
 
 | 
 | オッサン=new Panel(demoX,demoY); オッサン.zorder=-200;
 オッサン.setTransparentColor(color(0,0,0));
 オッサン.drawSprite(demoX,demoY,$pat_ziki+8);
 オッサン.scaleX=1;
 
 こんな感じに見よう見まねでパネルオブジェクトを定義して、
 オッサン.X+=60;オッサン.Y=60;
 と、パネルを動かそうとしたのですが、「xは定義されていません」とエラーが出てしまい、上手くいきません・・・
 というよりも、パネル自体が余り分かっていないかも知れませんが・・・
 
 このパネルを動かすにはどうしたら良いのでしょうか? お願いします。教えてください。
 | 
 
 
 | Re: パネルオブジェクトについて
  投稿者 : SuperSS(softbank219014226155.bbtec.net) - 2009/01/05(Mon) 12:34 
  No.12121
 |  | 
 |  | 
 
 
 | これは、新しくPanelCharを継承するオブジェクトを作成して、appearで呼び出した方がいいと思います。 | 
 
 
 | Re: パネルオブジェクトについて
  投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp) - 2009/01/05(Mon) 20:24 
  No.12126
 |  | 
 |  | 
 
 
 | ご解答ありがとうございます。それが一番手軽ですが、ちょっとした演出なので、出来ればオブジェクトを増やさない方があとあと分かりやすくなるかな、と思ったのです。 
 前にここで教えて貰った回答がこういったパネルの作り方をしていて、(座標の移動はしていませんでしたが)それを覚えたかったので・・
 | 
 
 
 | Re: パネルオブジェクトについて
  投稿者 : アカシン(g210002241145.d102.icnet.ne.jp) - 2009/01/06(Tue) 02:06 
  No.12127
 |  | 
 |  | 
 
 
 | >ちょっとした演出なので、出来ればオブジェクトを増やさない方が― 結構そういうことありますよね。
 
 やろうとされていることに問題はないですが、
 記載されているソースには、2点問題があります。
 
 1つ目はオブジェクトをappear()していないこと。
 appear()していないオブジェクトは、存在はしていても表示されません。
 
 もう一つは、Panelクラスを使用していること。
 色々理由があって、Panelクラスのみでは表示はできません。
 表示機能を持つパネルであるPanelCharクラスの使用をお勧めします。
 
 
 修正したソースは以下のような感じになります。
 
 panel_x = 150;
 panel_y = 100;
 panel_wd = 100;
 panel_hg = 70;
 
 pChar = appear(new PanelChar(panel_x,panel_y,panel_wd,panel_hg));
 pChar.wait();  //←重要。pCharがdie()しないよう止めておく
 pChar.panel.setTransparentColor(color(0,0,0));
 pChar.panel.fillRect(0,0,pChar.getWidth(),pChar.getHeight(),$clBlack); //意味はないが、パネルを黒塗り
 pChar.panel.drawSprite(20,20,$pat_ziki+8);
 pChar.scaleX=2;
 
 
 | 
 
 
 | Re: パネルオブジェクトについて
  投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp) - 2009/01/06(Tue) 07:51 
  No.12128
 |  | 
 |  | 
 
 
 | ありがとうございます! 表示されました! ちょっと画像が切れ気味ではありますが・・・たぶん panel_wd = 100;
 panel_hg = 70;
 この辺りが関係してくるのでしょうか?
 
 それと、このパネルオブジェクトを動かそうと
 panel_x+=60;
 panel_y-=60;
 pChar.scaleX=1+(0.05*i);
 
 とやってみましたが・・・まったく反応しないみたいです・・・
 パネルオブジェクトは単純には移動できないのでしょうか? 教えて頂ければ幸いです。
 | 
 
 
 | Re: パネルオブジェクトについて
  投稿者 : マッキー(0x3d2cb03c.rev.ncv.ne.jp) - 2009/01/06(Tue) 16:34 
  No.12129
 |  | 
 |  | 
 
 
 | それは、panel_xとpanel_yの値を変えているだけです。 
 panel_xとpanel_yは、appearの時しか使われてないので、
 pChar.xとpChar.yは、かわってないのです。
 なので、pChar.xとpChar.yに変えると動くと思います。
 
 PanelCharのほうが、確かに簡単ですね。
 Panelのほうは、若干自由度がありますが、表示の設定はめんどいです。
 少し紹介してみます。
 
 Panelは、drawとstretchDrawというメソッドのどちらかを使って、表示させます。
 drawは、スクロールできますが、拡大・回転などができません。
 この表示形式は、マップ作成で作られたマップで使われています。
 stretchDrawは、拡大・回転はできて、スクロールができません。
 これは、PanelCharで使われています。
 
 とりあえず、このどちらかのメソッドを書かないと、表示されませんので、少し大変です。
 慣れてきたら、使いやすいかも知れません。
 | 
 
 
 | Re: パネルオブジェクトについて
  投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp) - 2009/01/06(Tue) 22:31 
  No.12131
 |  | 
 |  | 
 
 
 | うーん・・・申し訳ありません、書き換えてみたのですが、動きませんでした。拡大で表示されていた画像が通常の大きさに戻った所を見ると、おっしゃられている、drawとstretchDrawを中途半端に指定しまっている予感はするのですが・・・ 
 panel_x=$ziki.x;
 panel_y=$ziki.y;
 panel_wd=32;
 panel_hg=24;
 pChar=appear(new PanelChar(panel_x,panel_y,panel_wd,panel_hg));
 pChar.wait();
 pChar.panel.setTransparentColor(color(0,0,0));
 pChar.panel.drawSprite(20,20,$pat_ziki+8);
 pChar.scaleX=2;
 for (i=0 ; i!=61 ; i++){
 pChar.x+=60;pChar.y-=60;pChar.scaleX=1+(0.05*i);
 }
 wait(30);
 
 今は、こんな感じです。iの繰り返しのところで、動かそうとしているのですが・・・
 もう少しで出来そうな気がしますので、よろしくお願いします!
 | 
 
 
 | Re: パネルオブジェクトについて
  投稿者 : マッキー(0x3d2cb1e9.rev.ncv.ne.jp) - 2009/01/07(Wed) 05:09 
  No.12134
 |  | 
 |  | 
 
 
 | この場合は、for文の{}内が一気に処理されるので、 動いて見えないのです。
 
 動いて見えるようにするには、updateを使います。
 普通、updateは、描画するという意味で覚えてる方も多いと思います。
 実は、それと同時に「1コマ(フレーム)待機する」ということもしているのです。
 
 for文の中にupdateを入れると、xとyがかわるごとに、1コマ待機するので、
 動いて見えるというわけです。
 
 ちなみにdrawとstretchDrawは関係ありません。
 この場合は、PanelCharが使われてるので、
 PanelCharがかってにstretchDrawで描画しています。
 | 
 
 
 | Re: パネルオブジェクトについて
  投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp) - 2009/01/07(Wed) 07:41 
  No.12135
 |  | 
 |  | 
 
 
 | ありがとうございます! 動くようになりました。 そうでしたか、てっきりパネルの所で詰まってると思っていましたが、update()を忘れていたんですね・・・すみませんでした。
 | 
 |