したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が900を超えています。1000を超えると投稿できなくなるよ。

【初心者歓迎】プチコンなんでも相談室【質問専用スレ】

1プチコンまとめWiki管理人★:2012/08/25(土) 15:52:47 ID:???
こちらは【初心者歓迎】の【質問専用スレッド】です。
プチコンで分からない事があったら、こちらで質問してください。
知識のある方は、よろしければ質問への回答のご協力をお願いします。
雑談その他は【プチコン総合スレッド】へお願いします。

★これは2ちゃんねるによく似た見た目の掲示板ですが、
ここは2ちゃんねるではなく、プチコンまとめWikiの一部です。お気軽に書き込んでください。
また、不適切な書き込み・他人が不快になる書き込みは削除する場合があります。

★マナーを守って楽しく書き込みましょう!
・質問前に、自分で出来る事は最大限試してみて下さい。きっと上達につながります。
・質問内容はなるべく詳しく書きましょう。
 ×プログラムを書いたんですが動きません
 ○上記のように命令を書いたんですが、「Syntax Error」というエラーが出てしまいます
・質問者も回答者も気持ちよく話を締められるように、解決したら一言お礼をお願いします。
 (質問者からの返答がなく、解決したのかもよく分からない状態になるのは良くないことです)

359いったん:2013/09/29(日) 16:13:06 ID:gIAMbAZk
>>358
手っ取り早いのはataxとatayのループを-1から3にするのがいいと思います
>>355
公式サイトから初心者講座に行きましょう
>>356
forループとビット演算は初心者講座へ
スプライトは
http://ww5.tiki.ne.jp/~ochame/petitcom/p002.htm

360おか3:2013/09/29(日) 17:30:09 ID:gAYJaNS.
いったんさん

ありがとうございます

361名無しでした:2013/09/29(日) 19:13:42 ID:tKr.fKuE
いったんさん回答ありがとうございます
ぴったりくっついた際に止まるにはどうしたらいいでしょうか?
めんどくさいなら返事なしで結構です

362初心者:2013/10/01(火) 18:36:22 ID:QiGTZbxI
初心者講座を読んでもINPUT文がわからなかったので誰か教えてくださいませんか?
あと、INPUT文はこういう時に使う、など例文を挙げて説明してくださるとうれしいです。
それと、例文を挙げてこのINPUT文はこういう意味だよと解説してくださるとうれしいです。
頼みごとばかり言って申し訳ないですorzよろしくお願いします。

363名無しさん:2013/10/01(火) 20:29:02 ID:ZrhADAEQ
>>362
初めてやる時やハイスコアの名前入力
セーブ・ロードするファイルの名前
パスワードっぽいものetc...


INPUT"スウジ";A

INPUT "モジ";A$

INPUT"スウジトモジノコンゴウ";A,B$

364Ricky:2013/10/01(火) 21:22:08 ID:rPySbMPo
マリオカートのような、グラフィック面を使った
擬似3dレースゲームの作り方を教えてください!!!
どなたかわかる方、教えてください!!!お願い致します!!!!!

365初心者:2013/10/01(火) 21:30:05 ID:tH5DDFzQ
>>363 すいません。わからないです。。。

366いったん:2013/10/01(火) 22:07:15 ID:gIAMbAZk

>>357
①自分の座標を変数にとっておいて後で取り出す。
②スクロールは付属プログラムを見るとわかると思います。判定はBGREADを使う。参考になればどうぞhttp://www1.m.jcnnet.jp/hurasa/hp/img/Pikumin.png

>>364
http://smileboom.com/special/ptcm2/co_contest/1st.php
ここのPETIT RUN mkIIなんかは随分参考になるかと思います。
>>365
実際にやってみるとわかると思います。
INPUT命令は変数という箱に入力した文字、数字を入れるっていうイメージ。
たとえば、
INPUT"アナタノナマエハ?";A$
と入れると、実行画面に「アナタノナマエハ?」と表示されます。
そこに適当な文字を入れてEnterしたあと。
PRINT A$
とするとさっき入れた文字が出てきます。はい終わり。初心者講座読んでも実際に試してみないとわかんないと思います。

367初心者:2013/10/01(火) 22:51:59 ID:QiGTZbxI
>>366 いったんさん!!すごくわかりやすかったです!!
ご回答ありがとうございました!!!

368Ricky:2013/10/11(金) 20:09:32 ID:eA8oz3Mg
質問です!
http://plaza.rakuten.co.jp/route21/5006/
http://plaza.rakuten.co.jp/route21/diary/201203270001/
↑のように、オプション(オレンジ色の、自機を追尾してくるやつ)
を動かすやり方が分かりません。
なにをどうすれば自機のあとを追っかけてくれるのでしょうか?
プログラムリストを見てみても、何がどうなっているのかわかりません。
なので、どなたか分かる方、オプションの動かし方を教えてください!
どうかよろしくお願いいたします!!!!!

369いったん:2013/10/13(日) 23:43:53 ID:2NPOLURE
OP又はOP$という変数に座標を格納して後で取り出しているようです。
座標はXY座標を別々にCHR$しているみたいです。

これでもわからなかったらググるといいと思います。「グラディウス オプション アルゴリズム」とかで。

370Ricky:2013/10/14(月) 11:03:23 ID:eA8oz3Mg
>>369
分かりません…
できたら、できたらでいいんで、
サンプル的なプログラムをかいてください!!!
お願い致します。

371Ricky:2013/10/14(月) 11:22:50 ID:eA8oz3Mg
>>369
分かりません…
できたら、できたらでいいので、
サンプル的なプログラムを
書いてください!!!お願い致します。

372いったん:2013/10/16(水) 14:18:22 ID:2NPOLURE
http://plaza.rakuten.co.jp/route21/5006/の解説で。
自分の座標はSPX(MID0)、SPY(MID0)というのに入っている。
自分が動くたびに今の座標をCHR$(座標)で圧縮してOP$(0)OP$(1)に格納する。(181,182行目)
オプションは過去の自分の座標をたどるように動けばいいのでOP$に格納しているの座標を取り出す。(187,188行目)
OP$には座標が文字列として入っているので欲しいところの文字をMID$で取り出し、さらにASC()で数値に変換する。

373名無しさん:2013/10/19(土) 03:28:25 ID:mbS1ZqXs
>>368
>>368
オプションって自分の後を常についてきますよね。
ついてくるということは、常に○秒前に自機がいた位置にいるってことです。
じゃあ、○秒前の自機の位置をプログラムから常に調べるには?
…自機の位置を○秒分だけ、常に覚えとかないといけないです。

自分の座標の変数が JIKIX,JIKIY で、2秒分(60フレーム*3秒=120フレーム)ぐらいの座標を覚させましょう。
ZAHYOMAX=120 : ZAPOS=0
DIM MAEX(ZAHYOMAX),MAEY(ZAHYOMAX)
と宣言して、XとYの前の値を覚えておく配列変数を120個分用意します。これに順番に座標を入れていきます。
今これの何個目を使っているかを覚えておくカウンターとして ZAPOS という変数を使います。

十字キーで自機のXとY座標を動かす処理をしてから

MAEX(ZAPOS)=JIKIX : MAEY(ZAPOS)=JIKIY   ' 自機の座標を覚えされる
ZAPOS=ZAPOS+1   ' 何個目を使うかのカウンタを進める
IF ZAPOS>=ZAHYOMAX THEN ZAPOS=0   ' 最後まで使った場合はまた1個目から使う

とやると、
MAEX(ZAPOS-1),MAEY(ZAPOS-1)に1フレーム(1/60秒)前の座標が
MAEX(ZAPOS-2),MAEY(ZAPOS-2)に2フレーム(2/60秒)前の座標が… というふうに
前の座標を覚えておけるようになります。
ただし、配列変数は120個しか用意していないので、120個目まで使い切ったら
また1個目から使いまわすようにします。【★】の部分

ひとつめのオプションが1秒(60フレーム)遅れてついてくるなら、
OPPOS=ZAPOS-60 ' 最後に座標を覚えた場所から60個前
IF OPPOS<0 THEN OPPOS=OPPOS+ZAHYOMAX ' ただし1個目より前になった場合は一番後ろから数えなおす
という計算で、MAEX(OPPOS),MAEY(OPPOS) から1秒前に自機がいた座標を取ることができます。

オプションを3つ置きたい場合は、上の計算を繰り返し使って、
・0.5秒前(30フレーム)
・1.0秒前(60フレーム)
・1.5秒前(90フレーム)
のように一定間隔前に自機がいた座標を取れば、オプションがついて行く動きの完成です。
座標を覚えおく秒数を増やしたい場合は ZAHYOMAX の値を増やしてください。

変数って何? 配列って? ぜんぜんわからない、という場合はオプションの動きを作る以前の問題なので、
公式サイトの初心者向け講座をもう一度読んできてください。

374Ricky:2013/10/19(土) 14:48:16 ID:XunW4X3Y
>>372
>>373
ありがとうございます!!!!!
おかげさまでわかりました!!!
助かりました!!!!!
教えてくださってありがとうございました!!!!!!!!!!

375おか:2013/10/22(火) 18:27:43 ID:FohJbT6k
スプライトのアニメ表示方法を教えてください。spanm命令をいれたのになりませんでした。

376いぬまろ:2013/10/22(火) 19:52:17 ID:xB5Y.w7k
>>375
SPSETしましたか?
しているならプログラムリストを見せてくれたら分かるかも知れません

377おか:2013/10/22(火) 20:07:00 ID:FohJbT6k
いぬまろさんプログラムリスト↓↓
ACLS
PX=110
PY=90
B=64
@LOOP
VISIBLE1,1,1,1,1,1
SPSET 1,B,2,0,0,0
SPANM 1,4,20,0
SPOFS 1,PX,PY
A=BUTTON()
IF A==4 THEN PX=PX-1
IF A==8 THEN PX=PX+1
:
ここは移動のプログラムリスト
:
VSYNC 1
GOTO @LOOP

378いぬまろ:2013/10/23(水) 07:31:01 ID:xB5Y.w7k
>>377
毎ループSPSETとSPANIMを実行しているので1枚目のアニメしか表示されませんので
SPSETとSPANIMをループ外で実行してください(5.6行目

379おか:2013/10/23(水) 22:53:30 ID:FohJbT6k
>>378
したけど、移動が出来なくなった。プログラムリストできればみせてください

380名無しさん:2013/10/24(木) 13:03:03 ID:GMUlcAz.
実質 @LOOP を3段下げるだけだから移動できなくなるってのは無いと思うんだけどな

381いぬまろ:2013/10/24(木) 15:40:00 ID:xB5Y.w7k
>>379
これでいけるはずですけど…

ACLS
PX=110
PY=90
B=64
VISIBLE1,1,1,1,1,1
SPSET 1,B,2,0,0,0
SPANM 1,4,20,0
@LOOP
SPOFS 1,PX,PY
A=BUTTON()
IF A==4 THEN PX=PX-1
IF A==8 THEN PX=PX+1
:
ここは移動のプログラムリスト
:
VSYNC 1
GOTO @LOOP

382Ricky:2013/10/24(木) 19:02:29 ID:XunW4X3Y
質問です。
シューティングゲームを作ろうと思っていて、
処理落ちを防ぐために自機や敵の弾などを、補間移動
させようと思っているのですが、どうやればよいでしょうか。
教えてください!お願い致します!!!

383おか:2013/10/26(土) 18:49:42 ID:FohJbT6k
>>381
すいません全部のプログラムリスト
ACLS
PX=110
PY=90
B=64
VISIBLE 1,1,1,1,1,1,
SPSET 1,64,2,0,0,0
SPANM 1,4,20,0
@LOOP
SPOFS 1,PX,PY
A=BUTTON()
IF A==4 THEN PX=PX-1
IF A==8 THEN PX=PX+1
IF A==1 THEN PY=PY-1
IF A==2 THEN PY=PY+1
IF A==9 THEN PY=PY-1:PX=PX-1
IF A==5 THEN PY=PY+1:PX=PX-1
IF A==10 THEN PY=PY-1:PX=PX+1
IF A==6 THEN PY=PY+1:PX=PX+1
IF A==8 THEN B=64
IF A==4 THEN B=72
IF A==1 THEN B=76
IF A==2 THEN B=68
VSYNC 1
GOTO @LOOP

これは直したんですが向きを変えるプログラムを入れているんですが向きが変わりません。どうしたらいいですか?。

384いったん:2013/10/26(土) 21:41:23 ID:2NPOLURE
B反映する命令無いから向き変わらないのは当たり前でしょ。
B変えるIF文の後にSPCHR 1,Bって入れればいいよ。
あと IF A==9,5,10,6のところは消して代わりにIF A==4,8,1,2のところを
IF A AND 4,8,1,2にするといいよ。下の向きを変えるところも同様。

385Ricky:2013/11/07(木) 21:52:48 ID:kKJKodko
質問です。
シューティングゲームとかで、自機や敵が出す弾を、
SPOFSで補間移動させるやり方を教えてください。
どなたか分かる方、回答お願い致します!!!

386おか:2013/11/13(水) 22:57:21 ID:iC80yMGM
TALKでイントネーションとかいうひと?みたいなのがあってどうやってかえればいいか(イントネーション)をおしえてください。説明書には@H数値のどうのこうのとかかいてあったけどわかりません。教えて下さい

387Ricky:2013/11/16(土) 19:34:00 ID:kKJKodko
>>386
TALk命令では、例えば
TALK”アイウエオ”
と打てば「アイウエオ」と話します。
イントネーションの変更は、@H 数値で変更でき、
@H0=標準語
@H1=ギャル風
@H2=外人風
@H3=関西弁風
となっています。
なので、例えば
TALK”@H3アイウエオ”
と打てば、関西弁風に「アイウエオ」と
話すというわけです。

388おか:2013/11/20(水) 22:49:01 ID:iC80yMGM
>>387
ありがとうございます!おかげでよくわかりました!
質問です。
リソースファイルの種類のMEM(メモリー)
はなんのデータをほぞんするんですか?いまRPGゲームを作っていてそれのやくにたてたらいいなって思って質問しました!回答お願いします

389名無しさん:2013/11/21(木) 04:51:58 ID:mj8/.FRk
>>388
256文字までの文字列を保存できます。
ただ、仲間が複数いたりステータスの項目が多い場合は、
グラフィック(GRP)を使うことを推奨します。
ちなみにグラフィックの場合は256x192x256=12582912バイト(12メガバイト)と、
データのサイズこそ大きいですが1枚で大量のデータを保存できます。

390名無しさん:2013/11/21(木) 05:29:47 ID:mj8/.FRk
訂正。
グラフィック面のデータ容量は49164バイトです。
しかし、実質12582912バイト分のデータを保存できるのは変わりありません。

391名無しさん:2013/11/21(木) 06:25:50 ID:mj8/.FRk
さらに訂正。
12582912"バイト"ではなく12582912"ビット"でした。
それでも256*192=49152文字分のデータが保存できます。

392名無しさん:2013/11/21(木) 07:12:23 ID:mj8/.FRk
さらにさらに訂正。
12582912ビットは計算ミスです。

……なんかメルビルさんと同じ計算ミスをしてるなぁ。
スレを汚して申し訳ない。

393名無しさん:2013/11/22(金) 13:05:13 ID:pscspFq.
>385
今更ですが
SPOFS 管理番号,x,y,補完時間なので
補完時間は一定(長め)にして
移動先をかなり遠めに設定すればいいと思います。
当たり判定はSPHITで取得できるので普通にこれでいいと思います。
動きを止める時は補完時間を0にしてSPOFSすると止まります。

394Ricky:2013/11/23(土) 21:18:48 ID:kKJKodko
>>393
助かりました!
ありがとうございました!

395おか:2013/11/26(火) 17:54:29 ID:iC80yMGM
>>393
どうしたらMEMファイルに文字列をほぞんできるんですか?

396名無しさん:2013/11/26(火) 20:25:37 ID:zDNIZ14U
>>393
MEMファイル自体が文字列なので代入するだけで保存はできます
VAR$="STRING"
MEM$=VAR$
?MEM$
SAVE"MEM:TEST"'保存
MEM$=""'消去
LOAD"MEM:TEST",0'読込
?MEM$

397<削除>:<削除>
<削除>

398Ricky:2013/12/04(水) 16:02:25 ID:kKJKodko
質問です。
付属の”GAME4”にでてくる敵の、
ホーミングミサイルとか、つぼの敵のように、
その敵の向きを自機に向かせるのって、
どうやったらできるのでしょうか。教えてください!
お願い致します。

399名無しさん:2013/12/04(水) 19:30:02 ID:4DRCLOs2
>>398
ATAN(目標Y-始点Y,目標X-始点X)で方向受け取れるよ。

400Ricky:2013/12/05(木) 20:51:23 ID:2v/jR0PI
>>399
ありがとうございます!でも出来ません…SPANGLEとかで、
敵の向きを自機の方向に向かせるために、
どのようなプログラムを組めばいいのかが分かりません。
なので、できれば教えていただきたいです。
お願い致します。

401名無しさん:2013/12/06(金) 00:17:42 ID:JZQ7oQfk
>>400
SPANGLEは角度が必要でATANはラジアン値が返るので
SPANGLE ...DEG(ATAN(目標Y-始点Y,目標X-始点X))とかでは

402Ricky:2013/12/08(日) 15:24:30 ID:kKJKodko
>>401
出来ました!
今まで教えてくださってありがとうございました!!!

403ヨッキ:2013/12/27(金) 18:31:37 ID:XGIK/ZTk
質問ですが、編集モードを作らないで作品を完成させることは出来ますか?

404ヨッキ:2013/12/27(金) 18:37:00 ID:XGIK/ZTk
質問ですが、プログラムを作ったあとの終わらせ方がわかりません。初心者なので、出来るだけ分かりやすくお願いします。

405ヨッキ:2013/12/27(金) 19:01:06 ID:XGIK/ZTk
期待しない方がいいかもしれませんが、たぶんですけど、INPUTは、「"」で囲まれたところを質問文にすることだと思います。(間違っていたらごめんなさい!)
例 (使い方)
INPUT "アナタノ ナマエヲ オシエテクダサイ" ; NAME$
(Aボタンを押す)↓
アナタノ ナマエヲ オシエテクダサイ
(という風に表示されると思います
そしたら、質問に答えてください。)

アナタノ ナマエヲ オシエテクダサイ
(名前を入力)タカノ ススム
(と言う風に質問に答えてください)

アナタノ ナマエヲ オシエテクダサイ
タカノ ススム
OK

(OKと表示されたらOKです。(多分))

406ヨッキ:2013/12/27(金) 20:29:23 ID:XGIK/ZTk
ある「サンプルプログラム集」を見つけて やってみたい と思って、実際にやって見たところ、1行で入りきれない部分があったのですが、Aボタンを押すと、エラーが表示されてしまいます。
どうしたら全部を入れることが出来ますか?
初心者なので、できるだけ分かりやすく教えてください。
(例)
個人情報を抽出
01. INPUT "アナタノ ナマエハ" ; NAME$
02. INPUT "オトシハ イクツデスカ" ; AGE
PRINT "アナタノ ナマエハ " ; NAME$ ; " テ( ")
と、( )の中がはみ出してしまいます。

407名無しさん:2013/12/28(土) 17:48:15 ID:er8fyo6w
>>406
なぜ一行に収めたいのですか?普通にサンプル通りに改行すれば普通に動くはずです。
もし一行にするなら命令の間にコロン「:」を入れる必要があります

408Ricky:2014/01/05(日) 09:22:40 ID:kKJKodko
質問です。
シューティングゲームで、
敵が自機に向けて出す弾を3方向とかに
したいんですが、どうすればできますか?
分かる方、どうか教えてください!お願い致します。

↓こんな感じで
              敵

           ↓  ↓  ↓
          
          弾   弾   弾

              自

409名無しさん:2014/01/05(日) 12:11:50 ID:CYoXanEU
>>408
単発の自機狙い弾が撃てるのなら、あとは角度を変えて発射するだけです。

410Ricky:2014/01/05(日) 14:35:00 ID:kKJKodko
>>409
あ、色々やったら出来ました!!!
ありがとうございました!!!!!

411Ricky:2014/01/09(木) 17:46:57 ID:kKJKodko
質問です。
↓動画
http://www.youtube.com/watch?v=qejgzFgFKdA&amp;feature=youtu.be
↓QRコード
http://www8.plala.or.jp/enuou/petitcom/menu3.html#gra1

↑なんですけど、このゲームのように、自分でBGでマップを作って
スクロールさせるやり方を教えてください!!!お願い致します。
自分の場合、作ってスクロールさせてもBGが途切れたり一周したり
してしまいます。なので、分かる方は、どうか教えてください
お願い致します。

412名無しさん:2014/01/10(金) 12:53:08 ID:WTHQUPTc
BGは64x64のサイズなので64以上のサイズは再び0に書き直す必要があります。64まで作ったらまた0に戻るようにしましょう。
スクロールは補完移動だと座標0に戻る時にぐるっと回ってしまうので保管時間は0にしましょう

413タマゴさん:2014/01/11(土) 13:56:53 ID:p6jjJFnQ
BGがスクロールしているとき、見えない部分を書き換えていけばいいんじゃない?

@MAINLOOP

IF SCX%8>BGX%8 THEN GOSUB @BGWRITE
SCX=BGX

BGX=BGX+1
BGOFS 0,BGX,0
VSYNC 1
GOTO @MAINLOOP

こんな感じに

414YoM:2014/01/12(日) 11:59:15 ID:ZI9hp1uE
プチコンでRPGをつくりたく、
SPSETで、CHREDでつくった自作スプライトを表示したいのですが、
調べてみても中々分かりませんので、教えて頂けませんか。
例文で示して頂けると有難いです。

415名無しのプチコン:2014/01/13(月) 12:13:39 ID:gd.MUO8Y
ホッケーが作りたいんですが、どうやったら壁で跳ね返らせられるのですか?

416YoM:2014/01/16(木) 22:35:35 ID:JsEpu10g
414についてですが、自分で解決できました。
ありがとうございました。

417名無しさん:2014/01/23(木) 21:02:04 ID:27T7ik1U
ACLS

X=123
Y=95
TX=RND(255)
TY=RND(191)
TA=RND(360)

SPSET 0,0,0,0,0,0
SPSET 1,0,0,0,0,0
SPHOME 0,8,8
SPHOME 1,8,8
SPOFS 0,X,Y
SPOFS 1,TX,TY

@A
VSYNC 1
IF BUTTON() AND 1 THEN Y=Y−2
IF BUTTON() AND 2 THEN Y=Y+2
IF BUTTON() AND 4 THEN X=X−2
IF BUTTON() AND 8 THEN X=X+2
R=DEG(ATAN(Y−TY,X−TX))
IF TA<R THEN TA=TA+4
IF TA>R THEN TA=TA−4
IF TA<0 THEN TA=360
IF TA>360 THEN TA=0
TX=TX+COS(RAD(TA))*2
TY=TY+SIN(RAD(TA))*2
SPANGLE 1,TA
SPOFS 0,X,Y
SPOFS 1,TX,TY
LOCATE 0,0:PRINT FLOOR(TA)”     ”
LOCATE 0,1:PRINT FLOOR(R)”     ”
GOTO @A

これでSPRITE1がSPRITE0を追跡するようにしたいんですが、SPRITE1がSPRITE0よりもYが大きいとSPRITE1が回ってばっかりで追跡してこなくなるんです、どうすれば直せます?

418名無しさん:2014/01/24(金) 01:33:16 ID:CYoXanEU
>>417
たしかATANが返す値は -π 〜 π じゃなかったかな。
DEGを噛ませたら -180 〜 180 になります。
リストを打ち込んではいないので動作確認はしていませんが・・・

419暁(>>417):2014/01/24(金) 15:35:28 ID:27T7ik1U
うーんひとまず何処を訂正したり付けたしすると良いかとか教えてほしいです

420名無しさん:2014/01/24(金) 21:25:32 ID:JUnbbvLQ
TAの範囲 0〜360
Rの範囲 -180〜180

ちゃんと範囲を揃えないと正しい判定は行えない

421:2014/01/24(金) 23:43:40 ID:YzwPXaTk
>>420
IF R<0 THEN R=R+360
してみたが意味なかった、くそぅ何処を修正すればいいのか

422名無しさん:2014/01/25(土) 11:57:23 ID:XZ4mTL1A
>>421
この場合ならIFは不要でR=R+180では?

423名無しさん:2014/01/25(土) 12:15:41 ID:lFSBzV7A
>>421
そのIFをATANの次ぐらいに入れれば、少なくとも挙動は変わるはずだか、
そして、「何処を」って言ったら旋回方向を決めてる
IF TA<R、IF TA>R 
しかないわけで…
そして、値の範囲をそろえればそれだけでうまくいくってものでもない
(例:目標物を1時方向に発見!自機は11時方向を向いている。左旋回だ!?)
だからTAとRの差を求めそれを正規化(想定する範囲に収めること)し、
どっちに回ればいいかを判定する必要がある。

この前、まめちしきに書いたんだけど外積使うと楽だよ

424名無しさん:2014/01/25(土) 14:23:56 ID:JUnbbvLQ
>>421
範囲を揃えたらもう自キャラの方向と敵キャラの進行方向が
範囲内の上限と下限にまたがっている場合に追尾できないという点を
改善する必要がある。
これはRとTAの角度差の絶対値が180度以上の場合に敵キャラの
進行方向を逆にするだけでいい。

425:2014/01/25(土) 15:38:09 ID://Vcaxvc
>>422
それだとなんか追尾しないで逃げていってしまう
>>423
>>424
「そのIFをATANの次ぐらいに入れれば、少なくとも挙動は変わるはずだか」
うん、確かに変わったけどなんか今度はSPRITE1がSPRITE0の左側に居ると逃げていくんだよねえ
俺高校生じゃないからさ、よくわからないっていうかなんていうか・・・ごめん
もうどうすればいいのか・・・わかんねえ

426423:2014/01/25(土) 17:04:28 ID:lFSBzV7A
つまりR{-180〜180}とTA{0〜360}の差を求める(-TA{-360〜0})
R-TA{-540〜180}
これを正規化する。まず値をプラスにしちゃう
R-TA+720{180〜900}
これを0〜360に収める。Dとしよう
D=(R-TA+720)%360
このDがあと何度右に曲がればPLAYER機の方を向くかになる。
これが180より小さければ右旋回すればいいが、
180より大きいなら左旋回する必要がある。

427名無しさん:2014/01/25(土) 18:50:05 ID:JUnbbvLQ
>>425
TAとRの範囲を揃えた場合にはRの値を求めた後に
IF ABS(TA-R)>180 THEN K=-4 ELSE K=4
を入れてTA=TA+4、TA=TA-4をTA=TA+K、TA=TA+Kに
変更すればいい。

428名無しさん:2014/01/25(土) 18:51:58 ID:JUnbbvLQ
↑訂正 TA=TA+K、TA=TA+K ではなく TA=TA+K、TA=TA-K

429:2014/01/25(土) 19:07:21 ID:YzwPXaTk
>>426
できたあああ!!ありがとう!!なぜこういう原理になったが知らんがなんにも考えないでとりあえずこれでゲーム作るよ!まじありがとう!
>>427
やり方が違ったのか知らんけどそれじゃできなかった、ごめん

皆本当にありがとナs・・・じゃなくてありがとう!!

430名無しさん:2014/01/25(土) 19:17:57 ID:JUnbbvLQ
>>427の原理は>>426と同じだけど
範囲を揃えることで正規化せず単純に差分を求めるだけで済む分だけ
理解をするのが簡単になっている。

431:2014/01/25(土) 23:34:37 ID:YzwPXaTk
え、えと、ごめん?なさい

432YoM:2014/01/26(日) 00:22:49 ID:wp61rHv6
ACLS
LOAD"SPU0:スプライト名"
LOAD"COL1:パレット名"
SPSET 0,0,0,0,0,0,32,32

↑のようにして画面にキャラを表示させているのですが、
プログラムを実行するときにいちいち確認ダイアログを表示させたくありません。
どういった命令を加えるとよいのでしょうか。
もしくは、別のよりよい命令があるようならば教えて頂きたいです。

433名無しさん:2014/01/26(日) 07:35:39 ID:.JtICb96
>>432
LOAD命令の引数にfalseを追加するとダイアログが消せます。
ついでにSYSBEEP=FALSEと入れればピーガー音もなくなります

434YoM:2014/01/26(日) 09:52:45 ID:wp61rHv6
>>433
出来ました。ありがとうございます。

435初心者:2014/01/26(日) 14:48:37 ID:kttrSivQ
下画面に変数を表示するにはどうしたらいいですか?

436ヨッキ:2014/01/27(月) 22:10:30 ID:XGIK/ZTk
またまた、質問です。
あるプログラムの変数をSAVEしたいのですが・・・
SAVEの仕方が分かりません
超超ド初心者なので、出来るだけ詳しくお願いします。
出来れば、例もつけてくれると嬉しいのですが・・・
サンプルもご用意でk(蹴
失礼しました。

437名無しさん:2014/01/31(金) 15:35:52 ID:XTL1auBA
>>436
http://wiki.hosiken.jp/petc/?FAQ#ge80793c

438Ricky:2014/02/06(木) 17:29:38 ID:kKJKodko
質問です。
64×64ドット以上のマップを、BGで書きたいのですが(DATA文等で)
どうすればできるのでしょうか。分かる方教えてください。

439名無しさん:2014/02/09(日) 15:54:33 ID:OcC0RsXo
スプライト使ったアクションゲーム作りたいんですが
キャラクターをジャンプさせるにはどのようなプログラム
を組めばよいですか?
一回ジャンプさせてみたけど、ジャンプさせてる時BGとの座標がずれて
BGREADを使っても地面にめり込んでしまいます
お助けをおぉぉ

440名無しさん:2014/02/10(月) 07:56:10 ID:FgW2VLVQ
>>438
DATA文で普通に64x64以上で定義しておきBGPUTで表示画面の一回り外を常に更新させれば良いと思います。そうすればあたかも大きいマップのように見えるはずです。(BGの仕様的にはループしていても)

>>439
ジャンプの座標の計算は鉛直投射でググると出ます。キャラの変数を座標+加速度にしましょう。
地面のあたり判定は座標の小数点以下を繰り上げor繰り下げすればいいと思います。プログラム見てないので良くわかりませんが。

441名無しさん:2014/02/10(月) 20:05:36 ID:OcC0RsXo
439です
またまたすみせん
僕のプログラムはメインループのたびに
初速度に加速度をたしてそれで出たものをたしています
A=初速度 B=加速度 C=速度

C=A
@LOOP
Y=Y+C
SPOFS 0,X,Y
BX=FLOOR(X/8)
BY=FLOOR(Y/8)
BGREAD (0,BX,BY+2),C(1),P,H,V
BGREAD (0,BX+1,BY+2),C(2),P,H,V
IF C(1)!=0 OR C(2)!=0 THEN とまれぇぇ!!(実際はRETURNです)
C=C+B
WAIT 1
GOTO @LOOP

加速度=重力という認識でよろしいんですよね
実際はサブルーチンで行っているんですが
こんな感じなんですが
ここはこうだった方がいいなどあったらお願いします

442名無しさん:2014/02/10(月) 20:08:14 ID:OcC0RsXo
連コメすみせん
C(1)やC(2)は速度とは別としてください

443名無しさん:2014/02/10(月) 20:59:18 ID:.JtICb96
>>440の者です
Y=Y+CとSPOFSを当たり判定の後ろに持って行ってはどうでしょうか?そうすれば「移動しても地面にめり込まなければ下がる」という風になるかと。
その代わりBGREADのところをBGREAD(0,BX,BY+2+C/8)(以下略)
あとIFの後に座標を修正する文を入れたほうがいいかもしれません。
違ったらすみません。

444名無しさん:2014/02/10(月) 21:40:21 ID:OcC0RsXo
おお!!ありがとうございます!!

445Ricky:2014/02/11(火) 12:56:26 ID:kKJKodko
>>440
すいません。
438ですが、例えばどのようにプログラミングすれば良いのでしょうか。
DATA文のマップの表示は、以下のようにして表示しています。

CLEAR:ACLS
RESTORE @MAP
@MAP
FOR Y=0 TO 23
READ A$
FOR X=0 TO 31
B$=MID$(A$,X,1)
C=0
IF B$=="0" THEN C=0
IF B$=="1" THEN C=782
BGPUT 0,X,Y,C,2,0,0
NEXT
NEXT
'次のDATA文は、横32文字、縦24文字のものです。
DATA"11111111111111111111111111111111"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11111111111111111111111111111111"

です。長くてスイマセン…
できれば教えていただきたいです。
よろしくお願い致します。

446名無しさん:2014/02/11(火) 22:20:10 ID:.JtICb96
>>445
サンプルを置きました。→http://ux.getuploader.com/petitcom_mkII/download/118/bgscr.PNG
上記のプログラムでは変数(map)にマップの状態を保存して移動する時にまわりの状態をBGに書き込んでいます。

447Ricky:2014/02/12(水) 16:36:02 ID:kKJKodko
>>446
おおおおおおお!!!!!
嬉しいです!
マジでありがとうございました!!!!!

448名無しさん:2014/02/17(月) 18:44:56 ID:v.mJVWFs
SPRITキャラをなめらかに
ジャンプさせるにはどうしたらいいですか?

449Ricky:2014/02/19(水) 16:27:50 ID:kKJKodko
>>448

1)ACLS:CLEAR
2)
3)SPSET 0,64,2,0,0,0
4)PX=100
5)PY=100
6)JP=0
7)JS=0
8)SPOFS 0,PX,PY
9)
10)GFILL 0,115,225,191,5
11)
12)@LOOP
13)B=BUTTON(2)
14)IF (B AND 16)==16 THEN JP=1:JS=6
15)IF JP==1 THEN GOSUB @JP
16)SPOFS 0,PX,PY
17)WAIT 1
18)GOTO @LOOP
19)
20)@JP
21)PY=PY-1
22)JS=JS-0.3
23)IF PY>100 THEN JP=0:PY=100
24)RETURN

これでどうでしょうか?
ちなみに1画面です(笑)
ジャンプの高さや速さを変えたい時は、
14行目の最後のJS=数 ってところをいらったり
22行目のJS=JS-数 ってところをいらったりしたら
いいですよ〜。役にたてたら嬉しいです!

450名無しさん:2014/02/24(月) 12:45:44 ID:1sNhFi5Y
>>449
そのプログラムだと、JSの値がスプライトの座標PYに影響を与えていないから
上に飛んでいったまま、地面に下りてこないよ

21)PY=PY-1

21)PY=PY-JS
と変更すると、ちゃんとジャンプになる

451Ricky:2014/02/24(月) 18:28:06 ID:kKJKodko
>>450
間違えました
報告ありがとうございました!

452Ricky:2014/02/27(木) 19:15:49 ID:kKJKodko
質問です。
http://6407.teacup.com/ochame/bbs/3711
http://ww5.tiki.ne.jp/~ochame/petitcom/polygon.htm
↑とかのポリゴンの表示の仕方を見ましたが、よく分かりません。
できれば、もう少しわかりやすく説明していただける方は
おられるでしょうか。ポリゴンの表示の仕方が知りたいです。
どなたか分かる方、ご回答宜しくお願い致します。

453名無しさん:2014/02/27(木) 23:43:11 ID:JUnbbvLQ
>>452
三角関数と行列とベクトルから説明しないといけないな。
ちなみにこれらは理解している?

454Ricky:2014/02/28(金) 20:36:09 ID:kKJKodko
>>453
すいません
理解してません…

455名無しさん:2014/02/28(金) 23:07:11 ID:JUnbbvLQ
>>454
それならば三角関数も行列もベクトルも使わずに説明する。
一番基本となるのは三角形1枚のポリゴンなので
その1枚のポリゴンの頂点のX座標、Y座標、Z座標をあらかじめ決めておく。
3Dポリゴン表示はどこから見ているのかというカメラの位置を設定する必要がある。
カメラの位置は計算しやすいように原点となる座標(0,0,0)に設置する。
カメラの向きは計算しやすいようにZ軸の正の向きに固定する。
すると三角形ポリゴンの各頂点のプチコンの画面上に表示する座標は
各頂点のZ座標で割るだけで良くなる。
http://ww5.tiki.ne.jp/~ochame/petitcom/tips/routine.htm#3d_screen
あとは表示してい3点を結んでそれを塗りつぶせば三角形1枚ポリゴンの描画完了。

ACLS:CLEAR
X(0)=15:Y(0)=20:Z(0)=10
X(1)=25:Y(0)=-20:Z(0)=10
X(3)=-20:Y(0)=30:Z(0)=10
FOR I=0TO 2
  SX(I)=128+X(I)/Z(I)*10
  SX(Y)=96-Y(I)/Z(I)*10
NEXT
GLINE SX(0),SY(0),SX(1),SY(1),2
GLINE SX(1),SY(1),SX(2),SY(2),2
GLINE SX(2),SY(2),SX(0),SY(0),2
GPAINT (SX(0)+SX(1)+SX(2))/3,(SY(0)+SY(1)+SY(2))/3,2

最初に設定している3点の座標を適当に弄れば表示されるポリゴンの形や大きさが変わる。
ただし、このプログラムでは処理の都合上Zの値は0より大きな数で無ければならない。
リンク先のポリゴン表示プログラムでは設定座標は回転の中心を(0,0,0)に設定して
カメラの位置は操作で変えられるようになっている。

複数のポリゴンを表示する場合は各ポリゴンの頂点座標をすべて設定してやれば可能になる。
ただし、それを回転させるには三角関数と行列が必須になるし、ポリゴンの裏表の判断や
陰影を付けるためにはベクトルが必須になる。

456名無しさん:2014/03/01(土) 13:15:28 ID:JUnbbvLQ
>>455のリストは1カ所タイプミスしてた

SX(Y)=96-Y(I)/Z(I)*10 は SY(I)=96-Y(I)/Z(I)*10

457名無しさん:2014/03/02(日) 11:11:17 ID:JUnbbvLQ
いや1カ所ではなかったw
最初に設定している座標における配列の添え字も間違いだらけで正しくはこう。
X(0)=15:Y(0)=20:Z(0)=10
X(1)=25:Y(1)=-20:Z(1)=10
X(2)=-20:Y(2)=30:Z(2)=10

コピペでリストを書きながら適当に作ったプログラムであることがバレバレだ

458Ricky:2014/03/02(日) 15:27:57 ID:kKJKodko
>>457
ありごとうございます!!!
ポリゴン使いこなせるように頑張ります!!!!!


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板