[pygame]画像が分割して表示されない...。検索[pygame]画像が分割して表示されない...。連絡するウェブサイト[pygame]画像が分割して表示されない...。2年前どうも、日記での報告に引き続いて、質問をさせていただくことになりました。Pygame関係の記事を参考にしながら、Pythonでゲームを作っているのですが、どうも困った点があり、質問させて頂きます。パックマンをアニメーションさせようと、画像を分割させたまではいいのですが、分割されて表示されず、プレイヤーが画像のようになってしまいます。ソースコードを添付しましたのでPygameに詳しい方ご回答お願いします。回デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。2年前デバッグしてみましょう。・画像を読み込む部分だと思います。推測に過ぎないので自分で悪さをしていそうなところを見つけてみてください。れいにんぐ^p^c++初心者を自負しています。質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^回答者さんには精一杯感謝します。[pygame]画像が分割して表示されない...。2年前>>purin52002さん不具合の原因のご推測、ありがとうございます!!ですが、この不具合の原因はご推測の通りではないようです...。Pygameについて詳しく調べてみて、何かそれらしいヒントがあったらご回答ください!!オフトピックコード:が、自分を駄目にしていることに気づいた件について。[/offtopic]デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。2年前こんにちは不具合の原因が画像を読み込む部分でも表示する部分でもないということをどのように確かめたのか、書いてみてください。目で見ただけでは不十分ですよ。あなたが以前教えてもらったptintデバッグを活用しましょうオフトピックPythonには便利なデバッグ機能が標準で組み込まれているようですね。こちらも勉強してみると面白いかもしれません。[pygame]画像が分割して表示されない...。2年前すいませんでした...。あれこれ考えてみた結果、表示の部分に原因があるかもしれないということがわかりました。Pygameについて調べてみてから回答をどうぞ。デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。2年前Pygameについて調べてみてから回答をどうぞ。質問するときに使っているPygameの機能とそれに期待している動作を質問者が書くほうが数億倍効率いいですよ。[pygame]画像が分割して表示されない...。2年前>>hideさんわかりました。split_image_loadという関数で、pygame.imageとして読み込んだ画像をfreamx(ここでは32)×freamy(ここでは32)のサイズのpygame.Surfaceのリスト(self.playerImg)に分割してセットします。本来は、プレイヤーとして右向きのパックマンが表示されるべきなのですが、最初に投稿した画像のように、パックマンの画像全体が表示されてしまいます。デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。2年前コードを見ましたが、Playerクラスのdraw関数の内容をコメントアウトしてもパックマンが描画されているため、意図していない位置でパックマンが描画されているように思います。[pygame]画像が分割して表示されない...。2年前printデバッグはやってみましたか?プログラムは上から順番に実行されるものですが、例外がありますよね。ループとか関数の呼び出しです。n回ループさせたくてfor文を書いたけど本当にぴったりn回ループしてるのか(この前もfor文が間違っていたからマップが表示されなかったですよね)関数の呼び出しは考えたとおりの順番で行われているのかそういうのを要所要所にprint文を入れて確認するのです。Hiragiさんが指摘しているように、実はPlayer.drawは実行されていなくて、別の何者かがパックマンの画像をscreenに張り付けていることに気づくのです。ここまではpygameに詳しい必要はない、それ以前の問題だったのです。次にいったい誰がパックマンを描画しているのか確認しましょう。パックマンを描画するのはコード:all.draw(screen)ですね。allを書き直すとコード:pygame.sprite.RenderUpdates().draw(screen)です。derUpdatesありますね、pygame.sprite.RenderUpdates.draw()こいつが分割されていないパックマンを描画しています。Spriteクラスで読み込んだ直後の分割されていない画像にself.imageと名付けてしまったのでこんなことになったんですね。これはちょっと運が悪かったかもしれません。一つ指摘させていただくと、hideさんに言われて今回使っているpygameの機能を説明していますが、読み込みに関する部分だけで表示に関する説明をしていません。その部分をしっかり書いていれば自分の力で原因を見つけられたのではと思います。[pygame]画像が分割して表示されない...。2年前shira211さんに言われてPygameのリファレンスを見ました。RenderUpdates.drawSpriteの画像のコピー描写を行い、描写先となった範囲の情報を取得します。Rect_list格納している全てのSpriteの画像を指定surface上に描写します。Group.drawと同じ動きですが、この命令では画面上で描写が行われた範囲の一覧を戻り値として返します。Group.clear命令でクリアした範囲も描写先範囲に含まれるので、戻り値として取得されます。値はpygame.display.update命令実行時に引数として設定するとよいでしょう。することで、ソフトウェア駆動モードでのパフォーマンスが向上します。した画面更新の速度を向上させる手法は、描写先の背景が静止画の場合にのみ有効です。難しそうで実は簡単なミスだったんですね...。(自分がpygame.sprite.RenderUpdate.drawで分割されて表示されると思いこんでいたこともある)ちなみにコードの方ですが、Hiragiさんに言われて以下のようにしたら、あっけなく治りました。sys.exit()あと、自作したSpriteのプロトタイプも少し変えてあります。(理由は、分割していない画像のときに不具合が起こると判断したからです。画像を分割するかどうかをチェックする。0.0どうもありがとうございました。オフトピックみんなもPygameでゲームを作る時は、画像を表示するときに、pygame.sprite.RenderUpdate.draw()は使わないように!!でないと、こんなことになるからね!!デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。2年前オフトピックスプライトに自分自身を描画する動作を実装する方法と、スプライトを管理するsprite.Groupに描画を任せる方法をごちゃまぜにしていたのが原因で、pygame.sprite.RenderUpdate.draw()は何も悪くありませんよ。あなたが参考にしているサイトにもきちんと書いてあります。draw()も実装していますが、これはスプライトグループを使うと必要なくなります。[pygame]画像が分割して表示されない...。[pygame]画像が分割して表示されない...。-in-python実はこれには理由がありまして...。デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。理由として貼り付けられているリンクは何の理由にもなっていないですよ?framex及びframeyがNoneの場合と書いているつもりであれば大きな間違いです。[pygame]画像が分割して表示されない...。2年前1.は以下のようなエラーログが出ます。'width'となると、3.のコードでないと必然的に動かないということになりますね...。オーバーロードできていたつもりなのに...。オフトピックPythonでのメゾットのオーバーロードって難しいもんだな...。デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。動かして動かなかったで終わってしまうのですか?なぜ動かないのかそこまで突き止めましょうそもそも今回はオーバーロードが難しいという問題ではなく、if文の条件の書き方に問題があるということを認識してください。なければ、他でまた同じ書き方をして問題が発生しますよ答えを教えるのは簡単ですが、答えを教えると以前のトピでもあったようにわかったふりをして同じことを繰り返す原因になります。動かなかったのはなぜかどうしてそうなったのかここをしっかり自分で調べてみてください。[pygame]画像が分割して表示されない...。さんif文の条件の書き方が原因であることはわかりました。Pythonの条件式やそれらしいエラーログをいくら調べても、その原因らしい物を見つけられません。どの単語を調べれば、あなたが考えている答えに近いのでしょうか?デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。指摘内容について検索内容を想像することはできませんか?面倒なのでとりあえず下記辺りを参照して考えてみてください。conditions演算子の優先順位http://www.pythonweb.jp/tutorial/num/index3.htmlどちらも基本的なことです。[pygame]画像が分割して表示されない...。2年前Pythonの演算子の優先順位を見てみたのですが...。C言語とは違って、andはisより優先順位が低いですね...。何が言いたいのですか?デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。None)これをPythonインタプリタで実行すると結果はNoneです。これはFalseと解釈されるので、求める結果ではありません。変えればTrueになるのか、項の数を変えてみたり、順番を変えたり、かっこをいろんな位置に入れたり、いろいろ試してみましょう。今はC言語から離れているようですが、ぜひC言語でも同じようなことをやってみてください。[pygame]画像が分割して表示されない...。助言しすぎるのもと思いましたが、道筋を書き残してみたいと思います。参考になればと思います。None○考えるべきこと・framexがNone(未指定)またはframeyがNone(未指定)だった場合にエラーなく処理されるようにしたい→問題となっている箇所がTrueになるようにしたいあとはshira211さんが提示されているようにPythonインタプリタ上で適合するif文の条件式を探し出せばよいです。以前にC言語は向いていないからPythonを頑張ると宣言されておりましたが、演算子や条件分岐は言語に依らない基本的な要素です。言語によって書式や用意されている演算子に違いはあるものの、考え方は言語によりません。よって、ここで正しく考え方を身につけておかないとどの言語でプログラムを組んだとしても必ずと言っていいほどつまづくことになります。[pygame]画像が分割して表示されない...。2年前やっぱり演算子の問題だったのですが...。以下のようなエラーログが出ました。'width'上記のようなエラーが出て、パックマンの画像全体を写すことができません。オフトピックshira211さんが出した課題がなんか面白そうでしたから、NaNiNETという簡単な問題を作ってみました。http://dixq.net/forum/blog.php?u=2409&b=6672ぜひご覧ください。デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。簡単な問題を作ってみました?そうじゃないでしょうasdさんや、shira211さんがデバッグ方法なりヒントなりを出してくれています。自分で考えようとしないんですか?エラーログが表示されました。○考えるべきこと・framexがNone(未指定)またはframeyがNone(未指定)だった場合にエラーなく処理されるようにしたい→問題となっている箇所がTrueになるようにしたいあとはshira211さんが提示されているようにPythonインタプリタ上で適合するif文の条件式を探し出せばよいです。以前提示したパターン1~4それぞれのパターンを確認するだけのコードです。None)))これを実行すると本来意図しない結果が見つかるはずです。その点については、asdさんが○考えるべきこととして日本語で条件を書いてくれています。それをそのままPythonで書いてみることから始めませんか?C言語、Python、その他の言語、もちろん演算子や条件演算子など違いはありますが基本的な考え方は一緒です。[pygame]画像が分割して表示されない...。演算子の問題だったのですが...。以下のようなエラーログが出ました。'width'上記のようなエラーが出て、パックマンの画像全体を写すことができません。はい、エラー報告ありがとうございました!...と言えば満足なのでしょうか?そのエラーが出ないように原因を突き止めて修正するのが”デバッグ”だと思います。それが直近で解決する問題だと思っていたのですが違うのでしょうか。「エラーが出ました」の報告で終わるのはデバッグではないです。それともそのエラーを直すのは目的ではないのでしょうか。沖さんも指摘してくれていますが、やりたいことがAなのであれば、なぜエラーになるのか、本来はどうしたいのかを考えてみませんか?現状ではオフトピックで囲まれてはいますが、それが本題になっているBになっているように感じます。[pygame]画像が分割して表示されない...。2年前>>asdさん...実はこれは冗談で、Aの方なんですが...。新しく追加した部分を見てください。None)))なので、スプライトのクラスはこうなります。画像を分割するかどうかをチェックする。0.0でも、freamxとfreamyをNoneにすると、No.22のエラーが出るとという意味で言ったのですが...。>>沖さん実はこっちでもそれへの回答をしていました。デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。>>沖さん実はこっちでもそれへの回答をしていました。していました?何を言っているのですか?あなたは何に対して返信しているのでしょう回答は今したんですよね自分のなかで解決していたのならなぜ最初から書かないのですか?条件式を直した結果エラーしたことを推測しろなんていうのは無理な話で、変えたのなら変えたでなぜそれを書かないんですか?さて、エラーが発生する原因はご自分でドキュメントを読んできてください。ヒントとなるのは以下の通りframexもframeyも値がセットされている場合は、split_image_loadを呼んでいますね?その場合、self.imageListにはSurfaceのインスタンスが入っています。heightにはどうやって取得した値を入れているでしょう?framexかframeyがNoneの場合は、image_loadを呼んでいます。heightへ代入している部分がおかしいとは思いませんか?オフトピックデバッグをするというのは、このようにエラーの原因をひとつひとつ自分で探して潰していく地道でつまらない作業です。本来、あなたの考えていることはここで明示してない以上、あなたにしかわからないのでコードとエラーだけ出しても質問になっていないことをいい加減理解してください。[pygame]画像が分割して表示されない...。>>asdさんでも、freamxとfreamyをNoneにすると、No.22のエラーが出るとという意味で言ったのですが...。えっ、それを直すためのヒントはすでに書き記しているのですが...と、思ったらすでにその部分は直されていたみたいですね。keito94さんの手元で直されていても、私はエスパーではないのでそれを透視することができません。'width'英語で書かれていますが、「pygame.Surfaceオブジェクトにwitdhなんて属性はないよ」と言われています。画像を分割するかどうかをチェックする。self.imageList[0].get_width()並べてみるとwidthの指定部分が違っていませんか?そもそもif節ではimage、else節ではimageList[0]を対象に処理しているので対象となるオブジェクトも別物のようですね?この違いを基にどうすればよいのかを考え、調べ、試してみてください。・どこがその原因になっているのか・なぜその部分が原因になっているのか・ではどのように直したら期待した動作になってくれるのか・直してみて期待した動作になっているか・可変部分がある場合、他の条件でも問題がないかを繰り返し行うことを言います。前の投稿のように「エラーになった!」の報告だけではデバッグにはならないのです。エラーが出たら上記の「なんで?どうして?どうしたらいいのかな?」を自分なりに考えてみてください。そのうえで直してもうまくいかない場合は上記の内容を提示した上で質問してみるとよいと思います。[pygame]画像が分割して表示されない...。2年前>>asdさん丁度それに気づいていた頃です。本来、あなたの考えていることはここで明示してない以上、あなたにしかわからないのでコードとエラーだけ出しても質問になっていないことをいい加減理解してください。わ、分かりました...。1freamxとfreamyの引数は、画像をfreamxXfreamyサイズに分割するという意味である。(ここはOK)2freamxとfreamyの引数がない時は画像全体をスプライトとして判定する。3のだが、画像全体を読み込もうとすると、No.22のエラーが出てしまう。いうことなら、わかると思いますが...。framexもframeyも値がセットされている場合は、split_image_loadを呼んでいますね?その場合、self.imageListにはSurfaceのインスタンスが入っています。self.imageList[0].get_height()Surfaceクラスのメンバ関数であるget_widthとget_heightで獲得しています。heightにはどうやって値を入れようとしているでしょう?あなたの発言を聞いて、まさかと思い、コードを以下の通りにしてみました。self.rect)エラーログが出ずに画像全体が表示されるようになりました。Pygameのドキュメントをちゃんと読むべきでした...。ありがとうございました。オフトピック脳内で完結させず、ちゃんと説明できるようにならないとな...。デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。2年前オフトピック今回の質問で得た教訓。image.get_height()にすべし。image.width(または、height)だと存在しないのでエラーが発生する。デバッグは投げ捨てるものではない。今までの質問でこれは学んだこと。質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。仕様書の大切さを改めて思い知った...。[pygame]画像が分割して表示されない...。2年前はい、正解です。エラーが出たら、まずどういうエラーなのかを確認する英語で書かれてはいますがself.imageはwidthという変数を持っていないよというのがわかります。self.image.get_width()に修正する期待通り動作するか確認をする期待の動作:framexまたはframeyがセットされていないときは、画像が分割されずに画像全体が表示される動作確認:framexまたはframeyがセットされていないときは、画像が分割されず画像全体が表示されたここまで行ってデバッグが部分的に完了ですframexとframey両方がNoneの場合ではなく、framexだけがNone、frameyだけがNone、両方に数値が入っている場合(可変部分の確認)同じように期待する動作はどういう状況なのか動作確認で期待する動作をするかゲームはツールなどと違ってリアルタイムに動いている部分が多く、止めて確認が難しい場合もあります。printデバッグにしても大量にログが出てしまって特定しにくい場合もありますなので、小さな問題から少しずつ解決していく癖をつけましょうちょっと問題があったけど他は動いてるからいいよね?と進めていってしまうと、原因を特定するにも時間がかかりますし、そこを直したらまた別の問題が発生したとなってしまう場合もあります。前にも書いたけどもデバッグ自体は非常に地道で面倒な作業ですが、ゲームを完成させるには避けて通れない作業です。ドキュメントを読むのも英語だと難しく感じる場合があるでしょうその場合は、参照したドキュメントをここの掲示板にリンクでも貼って尋ねてみてはいかがですか?こういうこと(明示必須)をやりたいけど、期待した動作(明示必須)にならなかったんだけどどうしてかな?今回は最後までゲームが完成すると良いですね。パックマン風ゲームをつくるのであれば最後までがんばってください。その際に、わからないことがあればこのトピのasdさんやshira221さんの返信もよく読んで、しっかりと質問をしてください。[pygame]画像が分割して表示されない...。解決したようでよかったです。「エラーが出た!」で終わらせずに「なぜ、どこで、どうすれば、これでいいか、これで大丈夫」と原因と解決まで持っていけるように頑張ってもらえればと。今回のようにエラーが出る場合は原因箇所の特定は容易ですが、期待した動作をしない場合(エラーにならないけどあたり判定がおかしいとか)は原因箇所を自分で見つけ出す必要があります。その場合にはプログラムの処理を追いかけて、問題となる場所を特定しなければならないので今以上に地道な作業が続きます。ミクプラは自由にリンクできます。