プチコン3号 SmileBASIC コミュニティプレイ日記ごごちー gogochii2016/10/24 20:42:13質問です。スプライトをランダムに配置する際にスプライトが重ならないようにするにはどうすればいいでしょうか?4そうだね 22返信プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿Hanzo rzsense2016/10/24 20:50重なったら配置し直す、 ではダメですか? 1そうだね プレイ済み2017/11/03 01:52:48に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿ごごちー gogochii2016/10/24 20:54えーと...SPCOLとか使うということでしょうか? ...やってみます!(`・ω・´)>0そうだね プレイ済み2017/11/03 01:52:48に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿Hanzo rzsense2016/10/24 21:11そうです。SPCOL と SPHITSP を使って、スプライトの重なりを判定します。 やってみて分からなかったら、添付を参考にしてみてください。添付は、64個のスプライトを1個ずつランダムに配置しますが、その際、既に置いたスプライトと重なってたら、重ならなくなるまで再配置を繰り返します。 ・・・と言っても、プチコンは処理が速いので、再配置を含めて一瞬で終わりますけどね。 1そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿ごごちー gogochii2016/10/24 21:13こんな感じでやってみたのですが スプライトが画面の左上でチラツいてる状況です... SPCOLの使い方などツッコミ所があれば教えてくれるとありがたいです0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿ごごちー gogochii2016/10/24 21:17コメントありがとうございます! さっそく試してみます!0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿Hanzo rzsense2016/10/24 21:30既にお気づきであれば、入れ違いで恐縮ですが、添付していただいたプログラムには、次のようなツッコミどころがあります。 1.スプライトの衝突を判定したら、@FURIに戻って繰り返そうとしているようですが、そのたびにSPSETを実行しているのがよくないです。SPSETは、指定管理番号のスプライトを初期化します。SPSET直後のスプライトの初期位置は(0,0)、すなわち左上になります。 2.@FURIループの中では、スプライトの位置をランダムに変えて、スプライト同士の重なりがあるかないかを確かめなければならないのに、SPOFSでは固定座標(-16,-16)を指定してしまっています。 つまり、SPSETでスプライトの座標が(0,0)になり、直後のSPOFSで(-16,-16)になる、これを延々と繰り返しているようです。 0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿ごごちー gogochii2016/10/24 21:37こんな感じにしてみましたがうまくいきません... 0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿Hanzo rzsense2016/10/24 21:58今気がつきましたが、これは、10×3のマスの中に、DMX+1個(6個?)のスプライトを配置する、ということですよね? だとすると、自分で言っといて何ですが、SPHITSPを使うのはあまりかしこいやりかたではなさそうです。 多分、最初にやろうとしていたように、10×3の2次元配列を使って、スプライトのあるなしを管理して、既にスプライトが置いてあれば再配置する、とやるのが筋です。 じゃあなぜ最初そうしようとしていたのにできなかったか、ですが、スプライトの座標を(0,0)~(9,2)のマス目で管理するのか、実際の表示座標で管理するのかが混同されているような気がします。 1そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿ごごちー gogochii2016/10/24 23:1654行目でout of rangeになっちゃうのですがどこがDX[I]の値にマイナスが入るとまずかったりしますか?0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿ごごちー gogochii2016/10/24 23:17訂正、22行目でした0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿でんぺん DENPEN2016/10/25 4:14この場合のマイナスはNG。Hanzoさんも指摘しているように、なんか混同しておかしくなってる印象を受けますね1そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[12]親投稿Hanzo rzsense2016/10/25 7:06DX[I]は、そのままDP配列の添字(そえじ)になりますが、配列の添字にマイナスを指定するのはNGです。Out of range(範囲外)エラーになりませんでしたか? DX[I]が表示座標だとしても、マイナスを指定する理由が分からず、恐縮ですが・・・ なるべく、ごごちーさんの意図を汲んだ形でプログラムを作ってみましたので、添付をご参照ください。 0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿ごごちー gogochii2016/10/25 17:51とても参考になります! 何から何まですみません0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[14]親投稿Hanzo rzsense2016/10/25 20:4110×3の計30のマス目のうち、例えば最上列の10マスにスプライトを並べて、マス目ごとシャッフルすれば、スプライトが重ならない配置が実現できそうです。この場合、スプライトが重なることによる再配置を考えなくて済むので、処理時間的にも無駄がありません。 このようなアルゴリズムを、フィッシャー・イェーツ(Fisher-Yates)のアルゴリズムと言いまして、例えば添付のように実行します。 同じ目的を達成するために、実にいろいろなやり方を選択できるのが、プチコンプログラミングの面白いところですね。1そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[15]親投稿Hanzo rzsense2016/10/25 20:46あ、間違えました! 先ほどのプログラム、18行目は SWAP DS[I],DS[RND(30-I)+I] が正しいです。恐縮です。 1そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[16]親投稿ごごちー gogochii2016/10/25 21:03SWAP文ではDS[I]のIをl以上30以内のランダムな番号にしているのでしょうか? あと話が変わるのですが、マス目上に配置したスプライトを動かすにはどうすればいいでしょうか...!><0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[17]親投稿ごごちー gogochii2016/10/25 21:03動かない...0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[18]親投稿Hanzo rzsense2016/10/25 22:03スプライトをどのように動かしたいのかがよく分かりませんが、例えば添付のようなものは参考になりますか? 0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[19]親投稿ごごちー gogochii2016/10/25 22:43作ってみました! マス目のボードごと右に動かす、もしくはスプライトを右にスクロールさせたいのです...0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[20]親投稿Hanzo rzsense2016/10/25 22:59こんな感じですか?1そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[21]親投稿ごごちー gogochii2016/10/25 23:28そんな感じです!ありがとうございます! ...ちなみにこのプログラムでスプライトにタッチとかできますか? BGを使ったことがなくて... とにかく、ありがとうございます!0そうだね プレイ済み2017/11/03 01:52:47に取得
プチコン3号 SmileBASIC コミュニティ返信[22]親投稿Hanzo rzsense2016/10/27 22:31スプライトをタッチできるようにするには、新たに次のような処理が必要で、そのためには、()内の命令を使います。 ・今まで上画面に表示させていたものを、下画面に表示させる (XSCREEN, DISPLAY) ・タッチペンの位置情報取得 (TOUCH OUT) ・タッチペンとスプライトの衝突判定 (SPCOL, SPHITRC) 0そうだね プレイ済み2017/11/03 01:52:47に取得