SRC質問掲示板Mk2
(現在 過去ログ1 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■77 / inTopicNo.1)  ユニットの位置の入れ替え
  
□投稿者/ 北京饅頭 -(2001/10/28(Sun) 11:11:14)
    こんにちは、北京饅頭です。
    現在、攻撃すると対象ユニットと相手ユニットの位置を入れ替える武器属性を作ろうとしているのですが、良い方法が思いつきません。
    一旦片方のユニットを他の座標にMoveしてから入れ替えようとすると、
    もしユニットがその『他の座標』にいた場合動作が変になってしまいますし、
    一旦ユニットをEscapeしてから入れ替えた座標にLaunchした場合、
    出現時のアニメが出てしまい入れ替わったように見えない上に、
    どうもハイパーモードや変身の残り時間を返す変数がないようなので、
    完全にもとのユニットの状態に戻す事ができません。
    私にはこの二つの方法しか思いつけなかったので、なにか良い方法があったら御教授願えないでしょうか。
引用返信/返信 削除キー/
■82 / inTopicNo.2)  Re[1]: ユニットの位置の入れ替え
□投稿者/ アイゼン -(2001/10/28(Sun) 13:52:52)
    どうも、はじめましてアイゼンともうします<(_ _)>
    えっと座標を変数に入れてからいどうささせればよいのではないでしょうか?*使用 全 使用 全 有位転換:
    相手座標X = X(対象ユニット)
    相手座標Y = Y(対象ユニット)
    対象座標X = X(相手ユニット)
    対象座標Y = Y(相手ユニット)
    exit

    *使用後 全 有位転換:
    Move 対象ユニット (対象座標X + 1) 対象座標Y
    Move 相手ユニット (相手座標X + 1) 相手座標Y
    Move 対象ユニット 対象座標X 対象座標Y
    Move 相手ユニット 相手座標X 相手座標Y
    exit

     有位転換というのはこちらで用意した武器です。属性指定はinfo関数を使って求めてください。
     少し不自然な動きをしますが、目的は達成されていると思います。
    詳しいお話はメールなどで相談しましょう。
     それでは〜
引用返信/返信 削除キー/
■83 / inTopicNo.3)  Re[1]: ユニットの位置の入れ替え
□投稿者/ リュウセイ -(2001/10/28(Sun) 13:57:54)
    Moveコマンドでオプション「非同期」を使用する方法なら
    Moveコマンド使用後にRefreshコマンドを使用する事で
    同時に動くので、違和感ないと思いますが…

    <例>

    *使用後 〜:
    Local A位置X A位置Y B位置X B位置Y
    #両者の位置をSetコマンドを利用して記憶する(略書き)
    A位置X = X(対象ユニット)
    A位置Y = Y(対象ユニット)
    B位置X = X(相手ユニット)
    B位置Y = Y(相手ユニット)

    #エラーが起こるかもしれないので対象ユニットを1マスずらす
    #このときマップ外に出ないようにしておく
    If X(対象ユニット) = 0 Then
    Move 対象ユニット (X(対象ユニット) + 1) Y(対象ユニット) 非同期
    Else
    Move 対象ユニット (X(対象ユニット) - 1) Y(対象ユニット) 非同期
    Endif
    #続いて両者移動
    #このとき逆にやるとエラーになるかもしれないので注意
    Move 相手ユニット A位置X A位置Y 非同期
    Move 対象ユニット B位置X B位置Y 非同期
    # 画面を更新する
    Refresh
    Exit

    ※即席で作ったものなので、正常に作動する保証はありません。
引用返信/返信 削除キー/
■85 / inTopicNo.4)  Re[2]: ユニットの位置の入れ替え
□投稿者/ 猫王@管理 -(2001/10/28(Sun) 14:01:54)
    同じ内容の書き込みをほぼ同時にやったので私のは消しておきました。
    非同期の後はCenterかRedrawで更新されます。
    Refreshは試した事がないのですが、Helpによると動かないかと。
引用返信/返信 削除キー/
■86 / inTopicNo.5)  すいません。勘違いしましたm(_ _)m
□投稿者/ リュウセイ -(2001/10/28(Sun) 14:05:19)
    すいません。猫王さんのおっしゃるとおり
    RefreshではなくRedrawかCenterコマンドでしたね。(ドジだ…)
    本当にすいません。m(_ _)m
引用返信/返信 削除キー/
■98 / inTopicNo.6)  Re[1]: ユニットの位置の入れ替え
□投稿者/ MrSamba -(2001/10/29(Mon) 07:55:38)
http://mrsamba.fws1.com/index.html
    こんにちは。これは前から私のUPしたギミック内で良く使っている(というか、
    全く同じことをする武器属性を以前作成してありDL可能ですが)のですが結構
    簡単です。みなさんの意見をあわせた感じになります。

    A位置X = X(対象ユニット)
    A位置Y = Y(対象ユニット)
    B位置X = X(相手ユニット)
    B位置Y = Y(相手ユニット)

    と攻撃イベント内で座標を取得してから、攻撃後イベントで

    Move 相手ユニット A位置X A位置Y 非同期
    Move 対象ユニット B位置X B位置Y 非同期
    Move 相手ユニット A位置X A位置Y

    という処理をします。最初の移動で片方がもう片方に隣接します。(地形によっ
    ては隣接しないこともありますが、ここでは関係ないので無視して構いません。)
    次の移動でそのもう片方がB位置に移動し、最後の移動で隣接していたユニットを
    誰もいなくなったA位置に動かします。それと同時に画面を更新するので
    最初の二つの移動はプレーヤーには見えません。

    それとこの武器属性の処理には一つ落とし穴があります。それぞれの移動後の地形が
    もしそれぞれの(もしくはどちらかの)移動不能な地形の場合、例えば、相手が
    深海にいるユニットでこちらが「水」適応がない場合、位置を取り替えることで
    不具合が生じます。私のギミックでは移動可能かをチェックした上で可能な場合のみ
    位置置換させるようにしていました。それではまた。
引用返信/返信 削除キー/
■99 / inTopicNo.7)  Re[1]: ユニットの位置の入れ替え
□投稿者/ 北京饅頭 -(2001/10/29(Mon) 16:51:47)
    リュウセイさん、アイゼンさん、MrSambaさん、御回答どうもありがとうございました。
    私も皆さんのおっしゃる方法は思いついていたのですが、
    この方法は下記のような時だと不都合が出てしまいます。
    
    MoveやLaunchで指定した座標が埋まっていた場合には最寄りの地点に出現しますが、
    「最寄りの地点」が複数あった場合X座標がもっとも小さい地点に移動し、
    かつそのような座標が複数あった場合、
    その中でもっともY座標が小さい地点に移動します。よって
     □□
    □●○□
     □□
    このようなユニット配置の時に○が●に攻撃した場合、ユニットの入れ替えが発生しません。
    このような状態は比較的良く発生すると思われるのでこれが解決しないとまずいです。
    (上で「ユニットがその『他の座標』にいた場合動作が変になってしまいますし」と言ったのはこれの事です。)
    と言う訳で、これを解決する方法は無いでしょうか?

引用返信/返信 削除キー/
■101 / inTopicNo.8)  Re[2]: ユニットの位置の入れ替え
□投稿者/ ヒロキ -(2001/10/29(Mon) 20:44:23)
    はじめましてヒロキです。

    >と言う訳で、これを解決する方法は無いでしょうか?

    For i = 1 to Info(マップ, 幅)
    For j = 1 to Info(マップ, 高さ)
    If Info(マップ,i,j,ユニットID) = "" Then
    Move ……
    EndIf
    Next
    Next

    ↑のようにしてマップの端から空いてる座標さがして
    そこに一旦Moveしてから入れ替えを行ってはどうでしょうか?
    ただし、Moveするまえに進入可能な地形かどうか判定する必要がありますが。

    それでは
引用返信/返信 削除キー/
■110 / inTopicNo.9)  Re[2]: ユニットの位置の入れ替え
□投稿者/ MrSamba -(2001/10/30(Tue) 10:01:04)
    えっと、私が言った方法でやると

     □□
    □●○□ ○が●に攻撃をしたとします。
    □□

    ○を●の座標に移動させます。が、その座標には●がまだいるわけですから
    Moveコマンドは勝手にその隣または隣が侵入可能でないならそのそばの可能な
    地点に○を動かします。この時点ではどの座標に移動しようが○がマップ上に
    いれば問題ありません。(Moveコマンドで○がマップから消えると言うことは
    ありません)

         □□
    □□□□□●A□ こーんな所にいても構いません。
    ○□□□□□□   これはただ単にA地点を空にする動作です。

    次のMoveコマンドで●を○がもといた座標に移動させます。

         □□
    □□□□□B●□ これでB地点が空きました。
    ○□□□□□□  

    さして三つ目のMoveコマンドで最初のMoveでどこかに飛ばされている○を●が
    もといた座標に移動させるわけです。この移動だけは非同期にしていないので
    そこで画面の更新が行われ、見た目には○と●が入れ代わったように見えるわ
    けです。

    それからヒロキさんも言っているように上の一連の処理をする前に●がAに侵入
    可能か○がBに侵入可能かをチェックする必要があります。これらが否ならば
    この置換が行われないようにしないと、思ったようには動作しないでしょう。
    それではがんばって下さい。もし質問の意図と私の解答が食い違っていたら
    すみません、言って下さい。


引用返信/返信 削除キー/
■114 / inTopicNo.10)  Re[3]: ユニットの位置の入れ替え
□投稿者/ 北京饅頭 -(2001/10/30(Tue) 15:58:43)
    うーん、私の説明不足でしたね。
    
    
     □□
    □●○□
     □□
    ○のいる座標をA、●のいる座標をBとします。
    この状態で○をBにMoveさせると、Bの隣の座標はA以外は埋まっていますから
    この場合の最寄りの地点であるAに○が跳ね返り、結果としてAは空になりません。
    そのまま●をAにMoveさせても、Aにはすでに○がいますからやはり●はBに戻ってしまいます。
    このまま○をBにMoveしても上記の事と結果は同じになり、結局入れ替わりは発生しません。
    
    要するに、こういうことが言いたかったのです。
    私の説明不足でお手を煩わせてしまい,申し訳ありません。

引用返信/返信 削除キー/
■121 / inTopicNo.11)  Re[4]: ユニットの位置の入れ替え
□投稿者/ あーる -(2001/10/30(Tue) 22:24:35)
    ども、あーるです。

    取り敢えず、この問題を解決できた(と思われる)ソースを書き出します。

    *使用 全 有位転換:
    # 技を使った際に双方の座標を記憶する
    対象X = X(対象ユニット)
    対象Y = Y(対象ユニット)
    相手X = X(相手ユニット)
    相手Y = Y(相手ユニット)
    Exit

    *使用後 全 有位転換:
    For i = 1 to 100
    Move 対象ユニット i i 非同期
    Move 相手ユニット 対象X 対象Y 非同期
    Move 対象ユニット 相手X 相手Y 非同期
    If (X(対象ユニット) = 相手X) and (Y(対象ユニット) = 相手Y) and (X(相手ユニット) = 対象X) and (Y(相手ユニット) = 対象Y) Then
    Break
    EndIf
    Next
    Redraw
    Exit

    # ここでの作業は
    # 1.対象ユニットを座標(1,1)に移動させる
    # 2.相手ユニットを技使用時に対象ユニットがいた位置へ移動させる
    # 3.対象ユニットを技使用時に相手ユニットがいた位置へ移動させる
    # 4.双方の座標を調べ、完全に入れ代わってなければ、
    # 対象を(2,2)に移動させた後2.3.の作業を繰り返す
    # 5.何回か作業した後、条件を満たす状況が完成すれば、そこで移動を確定させる

    一応簡易的ながら北京饅頭さんの状況を試して成功しました。
    マップの全座標にユニットがいる、なんて言う無茶苦茶な事態が生じない限り、
    問題は起きないかと思います。
    ……あ、相手ユニットのいる座標が対象ユニットの進入できない地形であれば、
    エラーが起きるかもしれません(^_^;
    そのあたりの細部の詰めはお任せします。

    でわ〜

引用返信/返信 削除キー/
■143 / inTopicNo.12)  ありがとうございました
□投稿者/ 北京饅頭 -(2001/11/01(Thu) 07:58:12)
    あーるさんの方法で成功しました!
    レスつけてくださったみなさん、ありがとうございました。
解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -