質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

668閲覧

processingのpython版でRPGを作る過程でプレイヤーを歩かせたい

kusi94

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

1グッド

0クリップ

投稿2023/07/05 04:16

実現したいこと

processingのpython版でRPGを作る過程でプレイヤーを歩かせたいです。

前提

processingのpython版でRPGを作る過程でプレイヤーを歩かせようと思い、ある本を参考にしてやろうと思いました。

発生している問題・エラーメッセージ

歩かせることだけのプログラミングは出来ましたが、タイトルから移動しそのまま動かすことが出来ません。

エラーメッセージ

該当のソースコード

#動かすだけのコード hero=[None,None,None,None] dir = 0 map=None x,y=250,250 def setup(): global me,map size(550,550) for i in range(4): hero[i]=loadImage("hero"+str(i)+".png") map=loadImage("map.jpg") def draw(): global x, y background(200) image(map,-x,-y) image(hero[dir],250,250) def keyPressed(): global x,y,dir if keyCode==UP: dir=0 y-=50 elif keyCode==DOWN: dir=1 y+=50 elif keyCode==LEFT: dir=2 x-=50 elif keyCode==RIGHT: dir=3 x+=50 #タイトルからつなげようとしたコード scene = None hero=[None,None,None,None] dir = 0 map=None x,y=250,250 def setup(): global scene size(800, 500) textFont(createFont(u'MS ゴシック', 30)) scene = Title() def draw(): scene.draw() def keyPressed(): scene.keyPressed() class Title(object): def __init__(self): self.img = loadImage("https://panda-chronicle-plus.com/wp-content/uploads/2017/05/dragonquest1-chapter01-01.jpg", "png") def draw(self): image(self.img, 0, 0, 800, 500) fill(255) textSize(40) text("> START", 320, 400) def keyPressed(self): global scene scene = idou() class idou(object): def setup(self): for i in range(4): hero[i]=loadImage("hero"+str(i)+".png") map=loadImage("map.jpg") def draw(self): global x, y background(200) image(map,-x,-y) image(hero[dir],250,250) def keyPressed(self): global x,y,dir if keyCode==UP: dir=0 y-=50 elif keyCode==DOWN: dir=1 y+=50 elif keyCode==LEFT: dir=2 x-=50 elif keyCode==RIGHT: dir=3 x+=50

試したこと

selfを入れてみたりしましたけど上手くいきませんでした。

補足情報

マップの作りかたも教えていただけるとうれしいです。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

歩かせることだけのプログラミングは出来ましたが、タイトルから移動しそのまま動かすことが出来ません。

シーン別のクラスに分けたいわけですね。

例えばこの2つを合体させるとします。

Python

1def setup(): 2 size(800, 500) 3 4def draw(): 5 background(0) 6 fill(255) 7 textAlign(CENTER) 8 textSize(80) 9 text("DRAGON QUEST", width/2, height/2) 10 if frameCount / 60 % 2 == 0: 11 textSize(40) 12 text("> START", width/2, height/4*3)

Python

1hero = [None, None, None, None] 2dir = 1 3field = None 4x, y = 128, 128 5 6def setup(): 7 global hero, field 8 size(352, 352) 9 10 img = loadImage("pipo-charachip029d.png") 11 hero[0] = img.get(32, 96, 32, 32) 12 hero[1] = img.get(32, 0, 32, 32) 13 hero[2] = img.get(32, 32, 32, 32) 14 hero[3] = img.get(32, 64, 32, 32) 15 16 field = loadImage("32x32mapchip_20190721.png") 17 18def draw(): 19 background(200) 20 image(field, -x, -y) 21 image(hero[dir], 160, 160) 22 23def keyPressed(): 24 global x, y, dir 25 if keyCode == UP: 26 dir = 0 27 y -= 32 28 elif keyCode == DOWN: 29 dir = 1 30 y += 32 31 elif keyCode == LEFT: 32 dir = 2 33 x -= 32 34 elif keyCode == RIGHT: 35 dir = 3 36 x += 32
  1. sizeを合わせる
    まあ途中で変えることもできますが...
  2. クラスを作る
    一般的に大文字始まりの名前です。
  3. グローバル変数をインスタンス変数に変更
    初期値の代入やsetupでやっていたことを__init__に移します。
    インスタンス変数は頭にself.を付けます。
  4. drawkeyPressedメソッドを作る
    コピペでもってきていいですが、インデントずれ・self忘れに十分注意します。

Python

1scene = None 2 3def setup(): 4 global scene 5 size(352, 352) 6 scene = Title() 7 8def draw(): 9 scene.draw() 10 11def keyPressed(): 12 scene.keyPressed() 13 14 15class Title(object): 16 def draw(self): 17 background(0) 18 fill(255) 19 textAlign(CENTER) 20 textSize(40) 21 text("DRAGON QUEST", width/2, height/2) 22 if frameCount / 60 % 2 == 0: 23 textSize(20) 24 text("> START", width/2, height/4*3) 25 26 def keyPressed(self): 27 global scene 28 scene = Field() 29 30 31class Field(object): 32 def __init__(self): 33 self.dir = 1 34 self.x = 128 35 self.y = 128 36 img = loadImage("pipo-charachip029d.png") 37 self.hero = [None, None, None, None] 38 self.hero[0] = img.get(32, 96, 32, 32) 39 self.hero[1] = img.get(32, 0, 32, 32) 40 self.hero[2] = img.get(32, 32, 32, 32) 41 self.hero[3] = img.get(32, 64, 32, 32) 42 43 self.field = loadImage("32x32mapchip_20190721.png") 44 45 def draw(self): 46 background(200) 47 image(self.field, -self.x, -self.y) 48 image(self.hero[self.dir], 160, 160) 49 50 def keyPressed(self): 51 if keyCode == UP: 52 self.dir = 0 53 self.y -= 32 54 elif keyCode == DOWN: 55 self.dir = 1 56 self.y += 32 57 elif keyCode == LEFT: 58 self.dir = 2 59 self.x -= 32 60 elif keyCode == RIGHT: 61 self.dir = 3 62 self.x += 32

変更前後をよーく見比べてください。
割と単純作業でそれほど難しくないですよね?

selfまみれになっちゃうのは、Pythonでやる以上仕方がありません。受け入れてください^^;

ぴぽや様の素材をお借りしました。

キャラクターチップ1 - ぴぽや倉庫
キャラチップ.zip in pipo-charachip029d.png

マップチップ 32×32~ - ぴぽや倉庫
ウディタ2_32x32mapchip_20210215.zip in 32x32mapchip_20190721.png


マップの作りかたも教えていただけるとうれしいです。

よくあるのは2次元配列で当たり判定(侵入不可エリア)や、マップチップを保持するようなものです。

迷路を右手法で攻略する(1) 地図を作成する – ゲーム考

Processingを利用した2DのRPGゲームフレームワークの製作過程 - 本気は出さないけどがんばる(・ω・`)

しかし問題はこういうデータを作ること自体が、非常にかったるいということです^^;

Tiled(汎用マップエディタ 海外ではデファクトスタンダードだと思う)を使用して、
Tiled | Flexible level editor

等の工夫でかったるさが大幅に軽減されます。

あるいは直接tmx(Tiledのファイル形式)を読む、Processing用ライブラリもあります。
linux-man/ptmx: Use Tiled maps on your Processing sketch.

前回紹介したリンクは、ptmxを使用して作ったものです。

投稿2023/07/05 10:18

TN8001

総合スコア10022

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kusi94

2023/07/05 14:21

前回に引き続き、ありがとうございます! とても参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問