Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
1168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
次のページ(過去)
返信[1]
親投稿
WHILEは条件を満たしている(1以上)間、WENDとの間を繰り返し実行する命令です。 質問の件では、条件のところに1と書いてありますよね。つまり1の場合、必ず条件を満たすことになるので、このWHILE〜WENDの間を永久にループすることになります。なのでメインループを作りたい場合によく使いますね。 ただ永久ループですが、その中でBREAKやGOTOなどを使ってループから抜け出すことは出来るので、それで次の流れに移ることはあります。 ちなみに命令自体(WHILE等)がわからないときは、命令のところで?キー(下画面右上の方にあるはず)を押すとヘルプを見ることが出来るので、それも活用してください。
1そうだね
プレイ済み
返信[1]
親投稿
そもそも暴走なんてしなければいいんですけどね〜。ただプログラムにバグはどうしてもついてまわるので100%安全とはいえないので自作コードが消える危険性を考えると何らかの手段は欲しいところです。簡単に上書き保存できるというだけでも違うんですけどね。
0そうだね
プレイ済み
返信[3]
親投稿
進展おめでとう! 解説をつけたのは、どうしてそうなるのかの理解を深めながらサンプルを読んで欲しかったのもあるので、わからないことはわからないままにしないで理解しながら学習してくださいねー。 サンプルに対しての不明点、疑問点、質問などは各サンプルのコメントで受けつけるので遠慮なく聞いてください〜。
1そうだね
プレイ済み
投稿
実行前にSAVE命令を実行するなど意図しない強制終了に備える方法などが出てきてるけど、そもそもとしてプチコンのバージョンアップでその辺の自動バックアップ機能みたいなのがつくといいんですけどね〜。もちろんセーブコストがかかることにはなるんでオプションでON/OFF出来る形で。
4そうだね
プレイ済み
返信[8]
親投稿
さて、ここまで来ればあとは簡単(?)ですね。 26:キャラクタの位置を変更。 27:定番の同期おまじない、VSYNC(1/60フレーム)。 28:メインループのラベルに戻る(飛ぶ) って感じでフィニッシュです! 長々と書いてしまいましたが、これが少しでも役に立てば嬉しいです。ご静聴ありがとうございました!
0そうだね
プレイ済み
返信[7]
親投稿
D(定義番号)が0(停止)の時はアニメーションをさせる必要がないのでIFで判断し、アニメーションの必要があるときにSPCHR命令で管理番号1のスプライトの定義番号を直接変えています。 この時に、MAINCNTというシステム変数を使っていますが、これはプチコンに始めから用意されている変数で毎フレーム勝手に数値が増えていくというカウンタ代わりに便利な変数です。 この変数をつかい4フレーム毎(なので4で割って使っている)に余りを求める命令であるMODを使い、さらに4で割った余りを求め、これをD(定義番号)に足しています。余りなので必ず0〜3の値になるのでそれによって一定パターンの繰り返しのアニメーションを行うことが出来ます。 今回SPANIMを使わなかったのは、こういうやり方もあるよ、という例と今回は直接変える事でコードが短くなるケースだったので1画面にも収まるのでこうしてみました。
2そうだね
プレイ済み
返信[6]
親投稿
ただAボタンの処理をこの位置にもってきたのにはちゃんとした理由があります。この位置にすることで、ブロックの上に乗っているときにしか判定されないので、空中でジャンプボタンを押してジャンプしてしまうなどが起こらないようになります。 ただ本当にこの位置でこのやり方で判断するのがベストかどうかはケースバイケースです。一つの例ぐらいに思っていてください。 22:BG接触判定時のIFの終わりですね。 24:ここはキャラクタをアニメーションさせている処理です。この部分が前回とやり方を変えてみたところです。 前回はSPANIM命令を使ってアニメーションさせたのですが、このようなやり方で自分でアニメを切り替えてアニメーションさせることも出来ます。というか普通はSPANIMのような便利な命令がない場合も多く、その場合はこういうやり方がスタンダードです。
0そうだね
プレイ済み
返信[5]
親投稿
この条件で判定している事からわかるようにブロックに対して頭はぶつかりません。単純にすり抜ける感じです。頭がぶつかるようにしたかったら、それは別途判定を加えて処理する必要があります。 18〜21:判定したBGが0以外、つまりなにかあった時に実行される部分です。 18:Y座標の位置がブロックの上になるように補正しています。BGは16×16のサイズなので、Yを16で割って(余りのでないDIVを使用してます)、再度16をかけることでちょうどキリの良い値にしてブロックの上に乗っかるようにしています。 19:ブロックに乗ったので加速度であるAYは0にしています。 20:ここはA(ジャンプ)ボタンの処理です。ボタンが押された時に上方向へ-12の加速度を入れているだけです。
0そうだね
プレイ済み
返信[4]
親投稿
17:ここが肝心要のBGとの当たり判定です。BGGET命令でレイヤー0に対してX+8,Y+16の位置にあるBG番号を取得しています。最後の引数1はこれをつけるとスプライトの座標の位置からBG番号を求められるようになります。これがないとスプライトの座標をBG座標に変換する必要が出てくるので、1にしておくとちょっと便利です。 X座標とY座標に数値を足しているのはキャラクタの中央足元の位置の座標を調べるためです。こうしないとデフォルトのキャラクタの原点は左上に設定されているので左上の位置のBGで判定されてしまいます。どの位置を調べるかというのは重要なので気をつけましょう。 また&&で同時にAYが0より大きいかどうかも条件に加えています。これがないと上昇中も当たり判定をしてしまい、キャラクタが突然ブロックに乗るワープのような状態が発生してしまうからです。
0そうだね
プレイ済み
返信[3]
親投稿
7:管理番号1にキャラクタを割り当てて登場させています。実際の位置は26行目で設定するので、ここでは画面に出しているだけです。 9:メインループのための定番のラベルです。 10:ボタンの入力を変数Bに入れています。また定義番号用の変数Dを初期化しています。 12〜13:左右ボタンでキャラクターを左右に動かすためのコードです。この時に、定義番号の為の値をDに設定しておきます。 15:Y座標に加速度AYを加えます。そして加速度AYには重力(1)を加えています。 ここでちょっと特殊なことをしていて、前回はやらなかったのですが、MIN関数を使い、AYが16より大きくならないようにしています。これはAYが16より大きくなると落下している時に判定がブロックをすり抜けてしまう可能性があるため、ブロックの最大の高さである16より大きくならないようにして飛び越えないようにしてます。
0そうだね
プレイ済み
返信[2]
親投稿
結構処理が似てるんで、とりあえず第1回とかぶるような内容の説明はサラッと流しますんで、わからない人は前回のやつをみると良いと思います。 一部はやり方をあえて変えてみたので、もちろんその部分はちゃんと説明します。サンプルに関する質問があったら、このコメントで答えるので聞いてください。ではスタート。 1:定番の画面クリアのおまじない 2〜4:BGに書き込む命令で背景となる地面ブロックを3つ描画しています。 6:使用する変数を初期化しています。てかDの初期化は不要ですね…。間違えて残ってました…。最後のコロンも消し忘れてるし…。 ということで、 X: キャラクタのX座標 Y: キャラクタのY座標 AY: Y座標への加速度(ジャンプや落下用) を設定しています。
0そうだね
プレイ済み
返信[1]
親投稿
とりあえずソースです。
0そうだね
プレイ済み
投稿
第二回、解説つきサンプル講座(?) 今回は、みんなが結構やりたがるサイドビューのジャンプとBGとの判定です! まあ第三回があるかは分かりませんけどね~。
40そうだね
プレイ済み
返信[4]
親投稿
なんだかんだでちゃんと理解しないで作っていくのには限界があると思いますよー…。 みなさんが出しているサンプルでも一つ一つのサンプルを吟味して自分のものにしていく感じにしていかないと今後どんどん厳しくなっていくと思います。 なので始めは小さな事から少しずつ、積み重ねるように学習して作っていくスタイルの方がいいと思います。
1そうだね
プレイ済み
返信[1]
親投稿
改善が続いてそうですね〜。 白系のキャラは着色機能(SPCOLOR)での色替えがしやすいみたいなので、強さ(スピード?)によって色を変えてみるとかするとまた画面が賑やかになって良いかもですよ。 引き続き頑張ってくださいー。
0そうだね
プレイ済み
返信[2]
親投稿
BGに載せると言っても、その処理を書くのは自分なので、どういう風に処理するかという感じになります。 なので例えばサンプルのように、なにもしなければ落下する(Y座標が増える)プログラムに対して、BGGETで指定座標のBGを調べ、そこになにかあったら落下を止める、などをして落ちないようにする(のせる)わけです。
1そうだね
プレイ済み
返信[1]
親投稿
プログラム処理イメージのサンプルです。
0そうだね
プレイ済み
返信[4]
親投稿
絵や音楽はまた別の才能ですしねー…。実際に絵や音楽をやっている人ならそれをどうやってデジタルに落とし込むかになりますが、そうじゃなかったら厳しいですよね。 それでも頑張ってそっち方面のスキルを習得する方法もありますが、それが無理だったら……出来る友達を見つけて仲間に引き込みましょう(^^;
2そうだね
プレイ済み
返信[2]
親投稿
おお、名前が出てる(^^; 僕の載せたサンプルはあとからコメントで解説を追加したので、まだ見てなかったら読んでみてくださいね〜。その際に、サンプルに関する質問があれば、そこへコメントしてもらえれば答えるのでー。
2そうだね
プレイ済み
返信[1]
親投稿
なるほどー。VSYNCは暗黙の了解ですね。 とりあえず1はキーリピート付きなので、本当の意味で押した時にしたいのであれば2にしておいた方がいいですね。
0そうだね
プレイ済み