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

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

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

■13323 / inTopicNo.1)  戦闘アニメが正しく表示されないバグ?
  
□投稿者/ 御刀 -(2004/04/15(Thu) 22:27:50)
    御刀です。

    先日ここでアドバイスをいただいて、それをもとに
    インクルを作ってみたのですが、そのインクルを使うと
    戦闘アニメが少し変になったんです。
    具体的には、

    ・武器アイコンと弾の画像がややずれて表示される
     (ビームライフルとビームの位置が合ってない、といった具合)
    ・回避時にユニット画像がスライドしない

    という感じの症状がみられました。
    不思議なことにそのインクルを使わなかったら正常に表示されるのです。

    私には何が原因なのかさっぱりわかりません。
    ソースをすべて掲示するので、どなたか、原因がなんなのか調査して
    いただけないでしょうか。
    申し訳ありません、すこし長いです。



    #=============================================
    # 熱量基本値
    #=============================================

    #  ※あらかじめ「外気温度」を宣言しておく

    *ターン 1 味方:
    Set 相手増加熱量 0
    Set 自分増加熱量 0
    Local 冷却
    ForEach 全
      冷却 = Call(冷却性能計算, 対象パイロット)
      熱量[対象ユニット] = Int(外気温度 * (1 - 冷却 / 15000))
    Next
    Exit


    #=============================================
    # 毎ターン熱量回復
    #=============================================

    *ターン 全 味方:
    Local 冷却
    ForEach 全
      If 熱量[対象ユニット] > Call(耐熱温度取得, 対象パイロット) Then
        冷却 = Call(緊急冷却性能計算, 対象パイロット)
        熱量[対象ユニット] = Int(熱量[対象ユニット] * (1 - 冷却 / 10000))
      Else
        冷却 = Call(冷却性能計算, 対象パイロット)
        熱量[対象ユニット] = Int(熱量[対象ユニット] * (1 - 冷却 / 10000))
      EndIf
      If 熱量[対象ユニット] < (外気温度 * (1 - 冷却 / 15000)) Then
        熱量[対象ユニット] = Int(外気温度 * (1 - 冷却 / 15000))
      EndIf
    Next
    Exit


    #=============================================
    # 移動により発生する熱量
    #=============================================

    ターン 全 全:
    ForEach 全
      X[Pilot()] = X(Pilot())
      Y[Pilot()] = Y(Pilot())
    Next
    Exit


    行動終了 全:
    Local 移動X 移動Y 移動距離 冷却 発熱

    移動X = Abs(X(Pilot()) - X[Pilot()])
    移動Y = Abs(Y(Pilot()) - Y[Pilot()])

    移動距離 = (移動X + 移動Y)

    If 熱量[Pilot()] > Call(耐熱温度取得, 対象パイロット) Then
      冷却 = Call(緊急冷却性能計算, 対象パイロット)
    Else
      冷却 = Call(冷却性能計算, 対象パイロット)
    EndIf

    発熱 = Call(発熱量取得, 対象パイロット)

    増加熱量 = Int((発熱 / 100) * 移動距離 * (1 - 冷却 / 15000))

    熱量[対象ユニット] = 熱量[対象ユニット] + 増加熱量
    If 相手増加熱量 <> 0 Then
      熱量増加アニメ 相手 相手増加熱量 熱量[相手]
    EndIf
    If (自分増加熱量 + 増加熱量) <> 0 Then
      熱量増加アニメ 対象ユニット (自分増加熱量 + 増加熱量) 熱量[対象ユニット]
    EndIf
    Set 相手増加熱量 0
    相手 = ""
    Exit


    #=============================================
    # 被弾により発生する熱量
    #=============================================

    攻撃 全 全:
    先攻武器が命中 = 0
    後攻武器が命中 = 0
    SetMessage 対象ユニット 攻撃(命中) "$(Call(先攻攻撃命中))"
    SetMessage 相手ユニット 攻撃(命中) "$(Call(後攻攻撃命中))"
    Exit

    先攻攻撃命中:
    先攻攻撃が命中 = 1
    Return

    後攻攻撃命中:
    後攻攻撃が命中 = 1
    Return

    攻撃後 全 全:
    Local 冷却 発熱
    Set 相手増加熱量 0
    Set 自分増加熱量 0
    相手 = 相手ユニット
    If 先攻攻撃が命中 = 1 Then
      発熱 = 0
      If 熱量[相手ユニット] > Call(耐熱温度取得, 相手パイロット) Then
        冷却 = Call(緊急冷却性能計算, 相手パイロット)
      Else
        冷却 = Call(冷却性能計算, 相手パイロット)
      EndIf
      発熱 = (Info(ユニット, Unit(対象パイロット), 武器, 対象ユニット使用武器, 属性レベル, 熱) * 10)
      相手増加熱量 = Int(発熱 * (1 - 冷却 / 15000))

      熱量[相手ユニット] = 熱量[相手ユニット] + 相手増加熱量
    EndIf
    If 後攻攻撃が命中 = 1 Then
      発熱 = 0
      If 熱量[対象ユニット] > Call(耐熱温度取得, 対象パイロット) Then
        冷却 = Call(緊急冷却性能計算, 対象パイロット)
      Else
        冷却 = Call(冷却性能計算, 対象パイロット)
      EndIf
      発熱 = (Info(ユニット, Unit(相手パイロット), 武器, 相手ユニット使用武器, 属性レベル, 熱) * 10)
      自分増加熱量 = Int(発熱 * (1 - 冷却 / 15000))

      熱量[対象ユニット] = 熱量[対象ユニット] + 自分増加熱量
    EndIf

    Exit


    #=============================================
    # 熱量増加アニメ
    #=============================================
    # Args(1)はユニットID
    # Args(2)は増加熱量
    # Args(3)は熱量

    熱量増加アニメ:
    Local i 増加量 ねつりょう
    Center Args(1)
    増加量 = Args(3) - Args(2)
    i = 0
    Do While (i <= 20)
      If Int(増加量 + (Args(2) * i / 20)) <= Call(耐熱温度取得, Args(1)) Then
        ClearPicture 190 200 350 210
        Line 200 200 250 210 #DDAA00 B
        ねつりょう = Int(増加量 + (Args(2) * i / 20))
        Font 10pt #DDAA00 Pゴシック Bold
        PaintString 200 185 "HEAT"
        PaintString 260 200 ねつりょう
        If ねつりょう > 1000 Then
          ねつりょう = 1000
        EndIf
        Line 200 200 (200 + ねつりょう / 20) 210 #DDAA00 BF
      Else
        ClearPicture 190 200 350 210
        Line 200 200 250 210 #FF0000 B
        ねつりょう = Int(増加量 + (Args(2) * i / 20))
        Font 10pt #FF0000 Pゴシック Bold
        PaintString 200 185 "HEAT"
        PaintString 260 200 ねつりょう
        If ねつりょう > 1000 Then
          ねつりょう = 1000
        EndIf
        Line 200 200 (200 + ねつりょう / 20) 210 #FF0000 BF
      EndIf
      Refresh
      Wait 0.1
      Incr i 1
    Loop
    Wait 10
    Return


    #=============================================
    # 各種能力の取得
    #=============================================

    冷却性能計算:
    Local れいきゃく
    If Info(ユニット, Unit(Args(1)), ユニットクラス) = "AC" Then
      Local HEAD装備
      Local CORE装備
      Local ARMS装備
      Local LEGS装備
      Local BOOSTER装備
      Local GENERATOR装備
      Local RADIATOR装備
      For i = 1 To CountItem(Args(1))
        If Info(アイテム,Item(Args(1),i),装備個所) = "HEAD" Then
          HEAD装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "CORE" Then
          CORE装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "ARMS" Then
          ARMS装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "LEGS" Then
          LEGS装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "BOOSTER" Then
          BOOSTER装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "GENERATOR" Then
          GENERATOR装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "RADIATOR" Then
          RADIATOR装備 = Item(Args(1),i)
        EndIf
      Next
      Incr れいきゃく LIndex(Info(アイテム, HEAD装備, 特殊能力データ, 放熱量), 2)
      Incr れいきゃく LIndex(Info(アイテム, CORE装備, 特殊能力データ, 放熱量), 2)
      Incr れいきゃく LIndex(Info(アイテム, ARMS装備, 特殊能力データ, 放熱量), 2)
      Incr れいきゃく LIndex(Info(アイテム, LEGS装備, 特殊能力データ, 放熱量), 2)
      れいきゃく = れいきゃく - LIndex(Info(アイテム, GENERATOR装備, 特殊能力データ, 発熱量), 2)
      Incr れいきゃく LIndex(Info(アイテム, RADIATOR装備, 特殊能力データ, 放熱量), 2)
    Else
      れいきゃく = LIndex(Info(ユニット, Unit(Args(1)), 特殊能力データ, 放熱量), 2)
    EndIf
    Return (れいきゃく)

    緊急冷却性能計算:
    Local れいきゃく
    If Info(ユニット, Unit(Args(1)), ユニットクラス) = "AC" Then
      Local HEAD装備
      Local CORE装備
      Local ARMS装備
      Local LEGS装備
      Local BOOSTER装備
      Local GENERATOR装備
      Local RADIATOR装備
      For i = 1 To CountItem(Args(1))
        If Info(アイテム,Item(Args(1),i),装備個所) = "HEAD" Then
          HEAD装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "CORE" Then
          CORE装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "ARMS" Then
          ARMS装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "LEGS" Then
          LEGS装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "BOOSTER" Then
          BOOSTER装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "GENERATOR" Then
          GENERATOR装備 = Item(Args(1),i)
        ElseIf Info(アイテム,Item(Args(1),i),装備個所) = "RADIATOR" Then
          RADIATOR装備 = Item(Args(1),i)
        EndIf
      Next
      Incr れいきゃく LIndex(Info(アイテム, HEAD装備, 特殊能力データ, 放熱量), 2)
      Incr れいきゃく LIndex(Info(アイテム, CORE装備, 特殊能力データ, 放熱量), 2)
      Incr れいきゃく LIndex(Info(アイテム, ARMS装備, 特殊能力データ, 放熱量), 2)
      Incr れいきゃく LIndex(Info(アイテム, LEGS装備, 特殊能力データ, 放熱量), 2)
      れいきゃく = れいきゃく - LIndex(Info(アイテム, GENERATOR装備, 特殊能力データ, 発熱量), 2)
      Incr れいきゃく LIndex(Info(アイテム, RADIATOR装備, 特殊能力データ, 緊急時放熱量), 2)
    Else
      れいきゃく = LIndex(Info(ユニット, Unit(Args(1)), 特殊能力データ, 緊急時放熱量), 2)
    EndIf
    Return (れいきゃく)


    耐熱温度取得:
    Local たいねつ
    If Info(ユニット, Unit(Args(1)), ユニットクラス) = "AC" Then
      For i = 1 To CountItem(Args(1))
        If Info(アイテム,Item(Args(1),i),装備個所) = "CORE" Then
          CORE装備 = Item(Args(1),i)
        EndIf
      Next
      たいねつ = LIndex(Info(アイテム, CORE装備, 特殊能力データ, 耐熱温度), 2)
    Else
      たいねつ = LIndex(Info(ユニット, Unit(Args(1)), 特殊能力データ, 耐熱温度), 2)
    EndIf
    Return (たいねつ)


    発熱量取得:
    Local はつねつ
    If Info(ユニット, Unit(Args(1)), ユニットクラス) = "AC" Then
      For i = 1 To CountItem(Args(1))
        If Info(アイテム,Item(Args(1),i),装備個所) = "BOOSTER" Then
          BOOSTER装備 = Item(Args(1),i)
        EndIf
      Next
      はつねつ = LIndex(Info(アイテム, BOOSTER装備, 特殊能力データ, 発熱量), 2)
    Else
      はつねつ = LIndex(Info(ユニット, Unit(Args(1)), 特殊能力データ, 発熱量), 2)
    EndIf
    Return (はつねつ)

引用返信/返信 削除キー/
■13324 / inTopicNo.2)  Re[1]: 戦闘アニメが正しく表示されないバグ?
□投稿者/ GAMEMASTER -(2004/04/15(Thu) 23:28:36)
http://nagoya.cool.ne.jp/gamemaster/
     GAMEMASTERです。

    > 先日ここでアドバイスをいただいて、それをもとに
    > インクルを作ってみたのですが、そのインクルを使うと
    > 戦闘アニメが少し変になったんです。
    > 具体的には、
    >
    > ・武器アイコンと弾の画像がややずれて表示される
    >  (ビームライフルとビームの位置が合ってない、といった具合)
    > ・回避時にユニット画像がスライドしない
    >
    > という感じの症状がみられました。
    > 不思議なことにそのインクルを使わなかったら正常に表示されるのです。
    >
    > 私には何が原因なのかさっぱりわかりません。
    > ソースをすべて掲示するので、どなたか、原因がなんなのか調査して
    > いただけないでしょうか。
    > 申し訳ありません、すこし長いです。
    >
    > (後略)

     フェイズ開始時のユニットの座標を記録しておくための配列に大文字の「X」「Y」をそのまま使用しているのが原因と思われます。
     別の名称に置き換えたところ、正常に動作しました。


     ターン 全 全:

     ForEach 全

      初期X[Pilot()] = X(Pilot())
      初期Y[Pilot()] = Y(Pilot())

     Next

     Exit


     行動終了 全:

     移動X = Abs(X(Pilot()) - 初期X[Pilot()])
     移動Y = Abs(Y(Pilot()) - 初期Y[Pilot()])

     (中略)

     Exit


     参考になれば幸いです。

     もう時間がないようでございますね。では、これにて退散させてもらいましょう。
引用返信/返信 削除キー/
■13329 / inTopicNo.3)  Re[2]: 戦闘アニメが正しく表示されないバグ?
□投稿者/ 御刀 -(2004/04/16(Fri) 20:59:33)
    GAMEMASTERさん、前回に続いて今回もありがとうございます!

    こちらでも確認したところ、正常な動作に戻りました。
    ご迷惑をおかけしました。本当に感謝しています!!


解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -