パネルオブジェクトの画像が表示されません
投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp)
- 2009/01/19(Mon) 18:43
No.12152
|
|
|
|
|
すみません、少し前にパネルオブシェクトをクラスの中で定義する方法を聞いたのですが、それを続けていたら”クラスが長すぎる”と表示されてしまいました。
それで、きちんとパネルオブジェクトを作って、それをappearする形で呼び出したのですが、何故かグラフィックが表示されないみたいです・・・ エラーを吐かないまでは調整しましたので、設定されてない、といった問題だとは思うのですが・・・
パネルキャラの定義はこんな感じです resize(64,48);scaleX=1;zOrder=-500;p=$pat_ziki+8;
こんな感じでappearしています t=new BGpane($ziki.x,$ziki.y,$pat_ziki+8);t.oyaziX=$ziki.x;t.oyaziY=$ziki.y;(t);
本当はプログラムを添付するのが一番いいのでしょうが、かなり長くなってしまっていて、すぐに出来そうに無いです・・・ この命令文でこの定義が抜けているよ、と分かる方は居ますでしょうか? 教えてください、お願いします。
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : イッカ!(p1077-ipbf3203hodogaya.kanagawa.ocn.ne.jp)
- 2009/01/19(Mon) 18:56
No.12153
|
|
|
|
インフルエンザKOEEEなイッカ!です。。
以下の原因が思いつきました。 ・パネルオブジェクトのUpdate()やwait()が抜けている。 ・Appearの出現場所が画面外 ・変数やクラスの名前が違う
全然違うかm(ry ちなみに「クラスが長すぎる」ってのは無視しても良いみたいですよ(´・ω・`)
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : マッキー(0x3d2cb63a.rev.ncv.ne.jp)
- 2009/01/19(Mon) 22:15
No.12154
|
|
|
|
添付ファイルを見ないと、詳しくはわかりませんが。 たぶん、pに値を代入してるだけじゃないでしょうか? この方法は、スプライトでは通用しますが、パネルではできません。 なので、appearでも画像を直接描画してくれません。
ちなみに、Kernelフォルダで調べたところ、パネルの書式は、 appear(new PanelChar(x,y)) こんな感じで、X座標とY座標しか、入れれません。 パネルの場合は、描画命令を書かないといけません。(drawSpriteなど)
あと、「クラスが長すぎます」って、長いプログラムを書いていると、 頻繁に出てくるので、気にしなくてもいいのですが、 30000バイトになると、Tonyuから編集できなくなります。(ワードとかではできるかな?) でも、コンパイルは30000バイト超えていても、できるようです。
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : うみんちゅー(nthkid198002.hkid.nt.ftth.ppp.infoweb.ne.jp)
- 2009/01/19(Mon) 22:49
No.12155
|
|
|
|
パネルオブジェクトにはpという変数は用意されてないです。
パネルの中に何か入れたい場合は
panel.drawsprite
を使う必要があります。通常のdrawSpriteと入力する変数が違うので注意です。(特にDrawDxSpliteは) あと、通常のdraw系の描画命令の殆どはpanelで使えないのが多いです。
クラスが長くなったら複数クラスに分割するとエラーがでなくなりますが・・・。 ただ、functionを一切使わないプログラムだったら不可能ですが>< 「クラス長すぎる」エラーは時々文字化けの原因にもなったりするので(特に日本語入力中)結構注意が必要かも。
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : NaN(cc-y5022.wsr.st.keio.ac.jp)
- 2009/01/20(Tue) 13:59
No.12156
|
|
|
|
>(t); これはappear(t);の書き間違いでしょうか。
具体的なことは何も申し上げられないのですが、 コードのコピー&ペーストを繰り返していると、自然とプログラム全体が長くなりますね。 そのような場合、配列とfor文を使うことでかなり短くなる可能性があります。 panel.drawSprite(x,y,$pat_p+0);panel.drawSprite(x,y,$pat_p+1);panel.drawSprite(x,y,$pat_p+2);・・・・・ ↓ a=new Array();for (i=0;i<=5:i++){a.add($pat_p+i);}//while前に一度実行すればOK for (i=0;i<=5:i++){panel.drawSprite(x,y,a.get(i));} マップパターンがおかしくならない範囲で、画像もプログラムに合わせて整理すると効果的です。
それでも、AIなど極めて複雑な処理を作っていると一杯一杯になってしまうことがありました。
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp)
- 2009/01/20(Tue) 18:07
No.12157
|
|
|
|
皆様、ありがとうございます。ひとまず短くしたものをアップしてみます、お願いいたします。(100KBを越えてしまうので、自分のサイトにUPしました) ttp://www.geocities.jp/shoolkeler/panel.zip クラス"BG"の★の注釈がたくさんある所が、問題だとおもいます。"BGpanel"が、呼び出すパネルオブジェクトです。
>イッカ!さん ひとまず、全て確認してみました。これらは間違いないと思います お身体にはお気をつけください。
>マッキーさん pに代入してるだけでした・・・パネルとスプライトは違うンですね・・・
>うみんちゅーさん これで行ける! と思って、panel.drawspriteもテストとしてみたのですが、やっぱり表示されずに、原因不明になってしまいました・・・
>NANさん すみません! 移し損ねでした。本ファイルの方は間違いありませんでした。 配列もそろそろ覚えないとな、と思っていた頃です・・・パネルを使えるようになったら、挑戦してみます。 画像をプログラムに合わせて整理する・・・とは、画像の大きさを8の倍数に合わせるようにしたりするのでしょうか?
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : OceanLight(nthkid198002.hkid.nt.ftth.ppp.infoweb.ne.jp)
- 2009/01/21(Wed) 23:00
No.12164
|
|
|
|
元うみんちゅーです。
そういえば座標について注意点があったのをいい忘れてた・・・
panel.drawspliteとかの座標の設定は、通常のドロー系の設定と違います panelの場合は(0,0)がパネルオブジェクトの左端、上端の座標なのですが、 通常のドロー系は(0,0)が画面全体の左端、上端の座標になってます。
なので、パネルに画像を表示するだけなら
width =getPatwidth (pat); height=getPatheight(pat); panel.resize(width ,height); panel.drawsplite(width,height,pat); wait();//←ずっと止めても画像は表示される //(patは表示したい画像)
これでうまく行くと思います。
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp)
- 2009/01/22(Thu) 21:08
No.12165
|
|
|
|
ありがとうございます! 直してみたら、表示されるようになりました。 ただ、scaleXを使って拡大したり縮小したいのですが、どうも数値を入力しても反映されないみたいなんです。 panel.scaleX と書いてみると、今度は定義されていないとエラーが出てしまいます・・・
グラフィックが半分切れてしまうのですが、これもscaleXに関係しているのでしょうか? 何も分からなくてすみません。お願いします。
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : NaN(cc-y4106.wsr.st.keio.ac.jp)
- 2009/01/23(Fri) 19:15
No.12166
|
|
|
|
画像の座標は、パネル内外関係なく常に画像の中心ですので、 panel.drawsplite(width/2,height/2,pat); これでちょうど収まると思います。
画像をプログラムに合わせて整理するというのは、画像の順番を都合よく変えるということです。 画像を別々のファイルに分散させず、ひとつのファイルにまとめ、 さらに表示したい順番で左上から並べておけば、それら連続して(まとめて)表示させるとき for文を効率よく使えるようになるわけです。
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp)
- 2009/01/23(Fri) 22:47
No.12167
|
|
|
|
なるほど、パネルは大きさを指定して、その中の座標を指して表示するんですね /2をしたら、ちゃんと収まる様になりました ありがとうございます!
・・・という事は、パネルで描画した画像を拡大することは出来ないのでしょうか? 検索してみると、PanelChar.scaleX という項目があったので期待していましたが・・・ 他の人の作品などを見ると、copyRect という命令を使って拡大しているようです・・・、スプライトのように、拡大率の指定だけで引き伸ばすことは無理なんでしょうか?
画像を一枚に収めると、アニメしやすくなりますね。あんまりサイズが大きくなると、なにか処理に影響しそうですが・・・
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : Triangle Ld.(softbank219014226155.bbtec.net)
- 2009/01/25(Sun) 21:28
No.12168
|
|
|
|
ちょっとした都合でSuperSSからTriangle Ld.に変更させていただきました。 パネルに描いたものを拡大縮小するには、Panel.scaleXではだめです。正しくはscaleXです。 これならパネルに描いたあとでも変化します。
|
Re: パネルオブジェクトの画像が表示されません
投稿者 : 111(fl1-118-111-75-47.gif.mesh.ad.jp)
- 2009/01/25(Sun) 23:23
No.12169
|
|
|
|
ありがとうございます! Triangle Ld.さん。 panel.scaleXだとエラーが出てしまうので、scaleXまでは行けたのですが、何故か大きくなりませんでした。 それで何か特殊な仕様があるのかな、と思ってましたが、ご指摘を受けていま見直したら、指定が間違ってました・・・
ご迷惑をお掛けしました。ありがとうございました!
|
|