Cities』開発中。Sailors』開発中。ガラクタを集めて資源にし、敵の襲撃を退けるDevlog全部Technicalインタビュー取材・リポートインタビューアクションゲームを手がける「開発者」たちにきく、アクションゲームの作り方。第三回『SnowFighters』開発学生チーム取材・リポート“たった4時間”でアクションゲームを作る男たちの戦い。取材・リポート『デモンエクスマキナ』独特のトゥーン表現やVFXを生み出すための工夫とは。取材・リポートスクウェア・エニックスの技術者が活用した「感情を揺さぶるメタAI」。2019」でオススメしたいゲーム11選。12:36反応TweetPICO-8でプログラミングを1から学ぶ連載、第7回です。プログラミング経験者の方は、日本語マニュアルを読んで、すぐに創作にとりかかりましょう。作った作品は、ぜひ掲示板へ。2Dプラットフォーマーを作ろう、というのが今年の目標ですが、その前に、見下ろし型の、初代『ゼルダの伝説』風のゲームを作ることにします。横スクロールの2Dプラットフォーマーは、ジャンプや地面との衝突など、難しい処理を含みます。手をつけるにはハードルが高すぎるので、ワンクッション置きたい思います。スポンサーリンクゼルダのような、1画面ごとにスクロールして広大な世界を冒険するゲームを目標としますが、まずは、上下左右に自由に動ける主人公を作ってみましょう。第4回で作ったプログラムを流用しましょう。スプライトとコードをすこし修正してあります。コントローラーの入力を受け付ける箇所を、input()という名前の関数に切り出してあります。spr(s,x-4,y-4)end超かんたんなゲーム:アイテムを取る今回はこれにもう一手間加えます。アイテムを登場させて、それを取るだけの超かんたんなゲームを作ってみましょう。アイテムのスプライトを描きましょう。何か好きなものを描いてみてください。筆者はトマトにしました。AUTOMATONにはTOMATOが含まれているから......。以下のとおりのコードを追加。プレイヤーキャラクターend描画のコードは順番が大事です。後に描いたものの方が上に(画面の前面に)描かれます。アイテムにプレイヤーキャラクターがかぶさった時、キャラクターの下に隠れたほうが「取った感」が出ますから、キャラクターより先にspr()で描きます。これだけの追加コードで、アイテムを登場させることはできました。次に実際に「取る」処理に取りかかります。衝突判定コンピューターゲームのお約束で、アイテムに触れたら、そのアイテムを取ったことになります。敵キャラクターに触れたら、ダメージを受けたりします。物体と物体が触れたかどうかを調べる「衝突判定」は、ゲームプログラミングでは重要な処理の一つです。中でも、3次元物体同士の衝突の計算は難しい分野の一つで、その話題だけの分厚い本が出ていたりもします。2Dゲームの衝突判定はさほど難しいことではありません。今回は、点と点の距離を使う方法にします。プレイヤーやアイテムは、ある程度の面積を持った物体ですが、今回の衝突判定においては、単なる点とみなします。点と点がじゅうぶんに近ければ、それらは触れている、ということにします。大雑把ですが、動かしてみて不自然でなければよいのです。スーパー簡単なことなので説明するまでもないですが、2次元空間での2点間の距離は、三平方の定理で計算できます。iy)だとすると、距離dを求めるには:この式の意味がわからなくても、大丈夫です。この式に座標の数値を入れれば距離がわかります。数学の定理は使用料タダの便利ツールです。理屈は気にせずガンガン使っていきましょう!さて、上記の数式をPICO-8のLuaコードで書くと以下のようになります。sqrt((x1-x2)^2+(y1-y2)^2)end数値のn乗は、^nで表せます。xの2乗なら、x^2。ルート(平方根)を求めるには、PICO-8で独自に定義された関数sqrt()を使います。RooT”の略で、すなわち平方根の意味です。距離がじゅうぶん近ければ、衝突したこととみなすので、衝突判定の関数は以下のようになります。endendこの関数がtrueを返すとき、2点は衝突しています。「じゅうぶん近い」とみなす距離は4にしました。1つのスプライトは8×8のサイズですから、その幅の半分です。以下のような位置関係です。アイテムを取ったらアイテムに触れたら、リアクションが欲しいところ。どこか画面の別の場所へトマトをワープさせることにしましょう。どこかにランダムに飛ばすために、乱数を使いましょう。x=1のときの結果はこんな感じ:返ってくる値は小数点を含みます。整数にしたい場合は、flr()を使いましょう。これは小数点以下を切り捨てます。flr(rnd(16))とすると、0~15までのどれかの値が出てきます。PICO-8の画面は128×128で、x座標、y座標ともに0~127の値をとります。iy=rnd(128)endさて、ここでさっき説明したflr()を使っていないので、アイテムの座標は小数点以下を含むこんな値になります:ix=124.313iy=65.959ピクセルのXやYの座標は整数になりそうですが、spr()関数の引数にこの値をそのまま入れても、大丈夫です。エラーになったりせず、問題なくスプライトが表示されます。PICO-8が適切に処理してくれます。これがPICO-8の、プログラミングする人へのやさしさです。ゲームを組み立てるさて、いままで作ってきた関数を組み合わせて、ゲームを仕上げましょう。_update()の中でプレイヤーキャラクターとアイテムとの接触を判定するcollision()関数を呼び出して、つねにチェックします。それらがぶつかっていたら、アイテムをワープさせます(warp_item())。0番のSFXを用意しておいてください。spr(s,x-4,y-4)end動かしてみると、こんな感じです:説明してないものも飛び散ってますが......きれいでしょコレ(上のコードでは出ません)おめでとうございます!ついに、ゲームらしきものが一つ完成しました。これが、あなたのゲーム開発者人生の第一歩です。長い道のりですが、一歩一歩着実に歩んでいきましょう。次回は、アイテムやキャラクターのデータを賢くまとめる新概念「テーブル」を使ってトマトを大量発生させたりします。ビーム、撃っちゃうね。Switch、アメリカの2日間のセールスでは歴代任天堂ハード最高のスタート。新作『ゼルダ』も過去最高のロンチに次の記事PS4版『パラッパラッパー』が4月20日に発売決定。Miharahttp://mihararyosuke.com/なかなか完成しないローグライクゲーム『Gesuido』を開発し続けている30代後半。レトロでモダンなファンタジー・コンソール『PICO-8』に魅了され、勝手に普及活動に励んでいる。PICO-8ゲーム開発入門(10)Technicalビーム、撃っちゃうね。PICO–8ゲーム開発入門(1)こちらもおすすめニュース『フォートナイト』プロゲーマーが、母親の学生ローンを「全額」肩代わりする親孝行。配信にてサプライズ報告し母は泣くWii本体の修理受付が、3月31日到着分をもって終了へ。2006年の国内発売から13年以上続いた修理サポート『サイバーパンク2077』延期理由はゲームの最適化不足だという噂報道に、『ゴッド・オブ・ウォー』開発者がツッコミ。