pyxelでRPG風のものを作る(8)
だらだらと作ってきましたが、今回で一応の区切りとします。作ってみたかった機能はとりあえずできたので、まぁOKということで。
今回はマップイベントと、メッセージウィンドウを作成します。マップイベントは特定の場所で敵を全滅させると扉が開くようにします。メッセージウィンドウは、ゲーム開始時とNPCとの接触時にウィンドウを出して、メッセージを表示させます。
まずはマップイベントから実装します。
def MapEvents_ctr(self,x,y):
xy_key = str(x) + "-" + str(y)
if xy_key == "1-2":
pyxel.tilemap(0).set(7+self.map_x, 10+self.map_y, ["006006"])
新しくMapEvents_ctr関数を作成します。引数のxとyでどのミニマップにいるかを判定し、マップイベントを制御します。今回は1-2のマップにイベントを設定します。pyxel.tilemap.setはタイルマップの特定の個所を変更する機能があります。タイルマップは3桁のおそらく16進数で指定するので今回の例では「タイルマップ0の(7+self.map_x, 10+self.map_y)の座標の部分にタイルマップ番号006を2枚並べる」ことになります。正直このあたりは正確に理解はしていないので、動かしながら確認してつくりました。
if len(self.enemys) == 0:
x = int(self.map_x / 16)
y = int(self.map_y / 16)
self.MapEvents_ctr(x, y)
マップイベントの呼び出し部分はenemysの長さを判定し、敵がいなくなったらMapEvents_ctrを呼び出します。
これで、敵を全部倒したらイベントが走るようになりました。
次にメッセージウィンドウを作成します。
def Movie_ctr(self,n):
if n == 1:
pyxel.rect(0, 65, 128, 63, 0)
self.Draw_fonts(["A","NA","TA","HA","O","U","KO","KU","NO",
"KA","KI","yu","U","KI","SI"], 5, 70)
self.Draw_fonts(["MI","YA","KO","NO","HA","ZU","RE","NI",
"SU","NN","DE","I","MA","SU"], 5, 80)
self.Draw_fonts(["KO","NO","SE","KA","I","WO","KI","MA","MA",
"NI"], 5, 95)
self.Draw_fonts(["BO","U","KE","NN","SI","TE","MI","MA","SI",
"yo","U"], 5, 105)
pyxel.text(5, 120, "Press SPACE-KEY to continue...",
pyxel.frame_count % 16)
elif n == 224:
pyxel.rect(0, 100, 128, 63, 0)
self.Draw_fonts(["MI","YA","KO","NO","E","I","HE","I","DA"],5, 105)
pyxel.text(5, 120, "Press SPACE-KEY to continue...",
pyxel.frame_count % 16)
elif n == 225:
pyxel.rect(0, 100, 128, 63, 0)
self.Draw_fonts(["MI","YA","KO","NO","JI","yu","U","NI","NN",
"DA"],5, 105)
pyxel.text(5, 120, "Press SPACE-KEY to continue...",
pyxel.frame_count % 16)
if pyxel.btnp(pyxel.KEY_SPACE):
self.movie_flug = False
Movie_ctr関数を作成しました。引数のnを見て、どのメッセージを表示するか判別します。その後は、以前作ったひらがら表示機能を使ってメッセージを表示します。メッセージ表示はスペースキーを押すと終了します。メッセージ表示に入っているかはmovie_flugで判定しています。これがTrueの場合はゲーム進行を停止して、メッセージウィンドウを表示するようにします。
コードの全体はGitHubに載せていますので、よろしければ見てやってください。
今後もちょくちょくいじるかもしれないのでGitHubのコードは変わるかもしれません。その時はごめんなさい。
ここまで読んでいただきありがとうございます!