投稿
ネタバレ
Daisuke 0909daiki09
プチコン初心者です。リンゴが上から落ちてきてそれを取るゲームを作っているのですが、画像のVSYNC 23を消すとリンゴが一番下まで落ちてこなくなって荒ぶって、付けたままだとインテリくんの動きがカクカクになってしまいます。どうしたらいいですか?親切な方教えてください…
3そうだね
プレイ済み
返信[1]
親投稿
カービィ★KIRBY Kirbystar_Nin751
VSYNC 23 と言うことは、垂直動機が23回来るまで待つ…つまり、23フレーム動きが止まると言うことです。 VSYNC 1にすれば滑らかになると思います
0そうだね
プレイ済み
返信[2]
親投稿
カービィ★KIRBY Kirbystar_Nin751
誤字ってた。 x 垂直動機 o 垂直同期
0そうだね
プレイ済み
返信[3]
親投稿
Daisuke 0909daiki09
カービィさん»VSYNCを1にすると画面上部でリンゴが荒ぶるんです…分かりにくいと思いますが画像です。(画像のリンゴの位置から下にリンゴが落ちてきません)
0そうだね
プレイ済み
返信[4]
親投稿
こうやま kouyama1967
 見た所 ・LOOPからAPPとUGOを呼び出し、ここはVSYNCなし ・APPの処理をしてVSYNC23 ・UGOの処理をしてVSYNCなし  のようですが、これだとVSYNCによる待ち時間が、APPを呼び出すか呼び出さないかで変わってしまいます。こういうプログラムの場合 ・LOOPからAPPとUGOを呼び出し、ここで好きな数だけVSYNC ・APPの処理をしてVSYNCなし ・UGOの処理をしてVSYNCなし  とするのが一般的かと思います。  またネタバレで文章を隠す必要は無いので、次回からネタバレ指定なしで書いていただければと思います。
0そうだね
プレイ済み
返信[5]
親投稿
GRS grs8001
荒ぶるのはリンゴが落下しきる前にリンゴのアニメを再度実行しているから VSYNC 23は帳尻あわせで付け足した命令だから全体的におかしくなります。
0そうだね
プレイ済み
返信[6]
親投稿
Daisuke 0909daiki09
こうやまさん»これからはそうします!
0そうだね
プレイ済み
返信[7]
親投稿
Daisuke 0909daiki09
サブループを遅らせるとおかしくなる事は皆さんのアドバイスで分かったのでメインループを遅らせてみたのですが、上手くいきませんでした…どうすればいいですか?
0そうだね
プレイ済み
返信[8]
親投稿
GRS grs8001
@LOOP内に GOSUB @APP を入れるのが問題点 (リンゴが落下中にもう一度リンゴの落下プログラムを呼び出している) 7:GOSUB @APP の下に@LOOPを移動させれば一応解決
1そうだね
プレイ済み
返信[9]
親投稿
otta777 otta777a
VSYNCの数値を少なくするとりんごが落ちてこなくなるのは りんごが下に落ちる前にメインループから@APPが呼び出されて 新しくりんごが画面の上の方に設置されるからです。 @APPのサブルーチンでSPCHK関数を使ってスプライトが 移動中は新しくりんごを設置しないようにRETURNで メインループに戻るようにすればインテリ君の動きが スムーズになると思います。
1そうだね
プレイ済み
返信[10]
親投稿
Daisuke 0909daiki09
なるほど…試してみます!
0そうだね
プレイ済み
返信[11]
親投稿
Daisuke 0909daiki09
ottaさん»SPCHK関数はこんな感じで使えばいいですか?
0そうだね
プレイ済み
返信[12]
親投稿
Daisuke 0909daiki09
たなかさん»そんな方法があったんですね…
0そうだね
プレイ済み
返信[13]
親投稿
Daisuke 0909daiki09
ottaさん»詳しいやり方をありがとうございます!
0そうだね
プレイ済み
返信[14]
親投稿
otta777 otta777a
>とりゅふさん 自分は@APPの次の行に IF SPCHK(I)!=0 THEN RETURN を挿入して こうやまさんが指摘されたようにメインループの中に VSYNCを移動してVSYNC 3としてみました。
0そうだね
プレイ済み
返信[15]
親投稿
otta777 otta777a
ところでりんごを3個一度に落としたいように 見えるのですがFOR命令の前にX=RND(299)+1が有るため X座標が同じになってしまって重なってしまっています。 別々の位置に表示したいのでしたらこれをFOR命令の 後に記述して下さい。
1そうだね
プレイ済み
返信[16]
親投稿
ツララ LongIceSword
プログラムの流れ的には二つのサブルーチン内で他のラベルへのジャンプは無いので@LOOPとGOTO @LOOPの間での無限ループですね。 @APPをループ内で毎回実行すると、その度にリンゴの位置を初期化してる(同じ管理番号のスプライトは複数個同時に表示出来ないのを思い出して)ので、たなかさんの例の通りにするか、otta777さんの例の様に画面内にリンゴがあれば以降の処理を実行せず戻る処理を書き足すといいと思いますよ。 @UGOも同様に「ボタンが一度押されたあと押され続けていない、もしくは押され続けているならSPANIMで設定したフレーム数経過した」以外は即リターンして座標を計算する処理をしないようにすればいいと思いますよ。 AXの変化量が32だと少しワープする様な動きになるかもですけど。
1そうだね
プレイ済み
返信[17]
親投稿
otta777 otta777a
すみません。SPCHK(I)ではなくてSPCHK(1)でした。
0そうだね
プレイ済み
返信[18]
親投稿
TERA(LL) tera0413
ところで、インテリ君は、迷路内を進んでる訳じゃ無さそうなので、こういう場合は、わざわざSPANIMでなく、SPOFSで直接移動させた方が良い件について。 (ゲーム的に一定量強制的に動かしたい意図があるなら別ですが、その場合移動中の入力キャンセルが必要ですね)
0そうだね
プレイ済み
返信[19]
親投稿
Daisuke 0909daiki09
ありがとうございます!試してみます!
0そうだね
プレイ済み
返信[20]
親投稿
Daisuke 0909daiki09
色々試してみましたが上手くいきません… ツララさんの「ボタンが一度押されたあと押され続けていない、もしくは押され続けているならSPANIMで設定したフレーム数経過した」以外は即リターンして座標を計算する処理をしないようにする のはどうプログラムを組めばいいか分からなかったので入れていません。すみません。
0そうだね
プレイ済み
返信[21]
親投稿
Daisuke 0909daiki09
こうしたら上手く行きました!でも何故上手く行ったのかよく分かりません。教えて下さい…
0そうだね
プレイ済み
返信[22]
親投稿
TERA(LL) tera0413
まず、SPSETは、プログラムの途中で何度もする事でもないので、プログラムの冒頭にでも。 そうする事で@LOOPの前の2行は必要無くなります。 メインループの中ですが、飛び先(サブルーチン)の役割を考えると、@UGOは、毎回実行、@APPは、りんごがアニメしてない時(=画面に無い時)だけ、ランダムに位置決めてアニメ開始、なので必要な時だけIF文で呼び出してます。 これを、把握できれば、うまくいかなかった理由も、見えてくると思います。 (えーと、次は、複数のりんごのうち1つでしか判断してない件についてかな(笑))
0そうだね
プレイ済み
返信[23]
親投稿
Daisuke 0909daiki09
1つでしか判断していないという事はループ変数のiを入れて IF SPCHK(i)==0 THEN GOSUB @APP をFOR~NEXTの中に入れればいいですか?(大文字のアイだと1に見えてしまうのでわざとiにしています…)
0そうだね
プレイ済み
返信[24]
親投稿
TERA(LL) tera0413
すみません、先走りしすぎましたね。 現状では、3つのリンゴは、同時に動いているので、考える必要は、無いですよ♪
0そうだね
プレイ済み
返信[25]
親投稿
Daisuke 0909daiki09
ちょっと進めて今当たり判定を付けているので出来れば教えて下さい…
0そうだね
プレイ済み
返信[26]
親投稿
TERA(LL) tera0413
当たる。 (当たったリンゴ)消す。 ・その時点でアニメ止める? 消えてる(アニメ止まってる)リンゴがあれば、あらたに降らす。 ・降らすのは、どのタイミングで? 個別で?一括で? ・***?のところは、プログラマの、何て言うか、デザインというかセンス的なところなので、本人しかわからないところで、そこのやりかた次第で、解決方法は変わるので、一概には説明できないですねー。 (先に当たった時の処理が決まらないと、ここの処理方法が決まらない)
0そうだね
プレイ済み
返信[27]
親投稿
Daisuke 0909daiki09
TERAさんありがとうございます!
0そうだね
プレイ済み