にゃんころ部屋

ゲーム制作、日記などのブログ。
うどん県民、ブログ歴10年。

ダメージポップアップ

2022-06-26 05:24:03 | RGSS3
ダメージポップアップを触ってました。
画像は0~9と正負記号です。1つがx:10 y:15ドットの大きさです。
ダメージの数値を画像の位置と同期させて描画する方式です。
draw_textは使用しません。スクリプト内にはありますがテスト用の表示となります。確認用です。


配列num_listが描画用データです。3桁までしか描画できません。仕様上3桁で十分なので問題なしとします。

num_list[0]が正負記号です。10で+ 11で- です。
#回復判定で数値が負の場合絶対値に変換後(abs)num_list[0]に11を設定します。

numlist[1]が100の位 numlist[2]が10の位 numlist[3]が1の位です。
実行される値が何桁かによって処理が変わるのでまず桁数の確認です。
最新のRUBYは桁数の取得を行うdigit関数があるのですがaceのRGSSはバージョンが古いのでありません。
def count_digit関数で文字列に変換後、lengthで取得します。

数値が3桁の場合100の位は100で割ることで取得できます。
10の位は100で割った余りをさらに10で割ると取得できます。
1の位は100で割った余りをさらに10で割った余りとなります。
num_list[1] = num / 100
num_list[2] = (num % 100) / 10
num_list[3] = (num % 100) % 10

取得後描画します。
self.bitmap.stretch_blt(rect_2, n_bitmap, rect_1)

#==============================================================================
# ■ Sprite_PopUpMaster
#==============================================================================
class Sprite_PopUpMaster < Sprite
#--------------------------------------------------------------------------
# ● 定数
#--------------------------------------------------------------------------
# ■フォント
FONT = ["Meiryo", "Impact", "Arial Black"] # フォント
# ■動力
M_OP = 30 # 透明化開始フレーム数(30)
OP_S = 15 # 透明度変化スピード(15)
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(pop = [""])

# スプライト設定
super(viewport = nil)
self.bitmap = Bitmap.new(40, 30)
self.bitmap.fill_rect(0, 0, 40, 30, Color.new(255, 255, 255, 128))
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
self.x = 90
self.y = 390
self.z += 200
self.opacity = 255

num_list = [10, 0, 0, 0]

#回復判定
pop.each{|value|
if value.is_a?(Numeric) and value < 0 #valueが数値で0未満の場合
pop[0] = value.abs #valueを絶対値に変換する。
num_list[0] = 11
end
}
#

num = pop[0] #rand(150)
p num.to_s + ":桁数"
p count_digit(num)

digit = count_digit(num)
case digit
when 1 #1桁
num_list[3] = num
when 2 #2桁
num_list[2] = num / 10
num_list[3] = num % 10
when 3 #3桁
num_list[1] = num / 100
num_list[2] = (num % 100) / 10
num_list[3] = (num % 100) % 10
else
p "桁数エラー"
end

p "num_list:"
p num_list

#
base_color = color = [Color.new(255,255,255), Color.new(100,100,100)]

pop.each{|value|
self.bitmap.font.name = FONT
self.bitmap.font.size = 15 #32

self.bitmap.font.color = base_color[0]
self.bitmap.draw_text_f(0, 15, 40, 15, value, base_color[1])
}
#

#描画
n_bitmap = Cache.system("Number")

num_list.each_with_index{|value, i|
rect_1 = Rect.new(value * 10, 0, 10, 15)
rect_2 = Rect.new(0 + i * 10, 0, 10, 15)
self.bitmap.stretch_blt(rect_2, n_bitmap, rect_1)
}
#

#~ self.bitmap.stretch_blt(self.bitmap.rect, n_bitmap, n_bitmap.rect)

# 動力設定
@delay = 0
@count = 0
self.visible = false if @delay > 0
end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def count_digit(num)
return num.to_s.length
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose if self.bitmap != nil
super
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
if @delay > 0
@delay -= 1
return
end
self.visible = true

if @count >= M_OP
self.x -= 1
self.opacity -= OP_S
end

# 更新カウント加算
@count += 1
dispose if (self.opacity == 0)
end
end

画面左下+035が描画結果となります。
下の数値は確認用です。「35」なので正常に動作しています。
def updateで30フレーム経過後、左にスライドしながらフェードアウトします。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

戦闘画面β3

2022-05-22 12:26:48 | RGSS3
動作する所まで作成しました。

05.19


戦闘コマンドはコモン・マスター・スキルの3つにわかれています。
十字キー左右で変更できます。

画像はコモンコマンドです。攻撃、防御など共通行動を選択できます。
また、各クラスの最初から覚えている固有スキルも選択できます。
昔作ったやつは最初にスキルなにも覚えてないので気になるという感想があったので。

スキルコマンドはマスタリーで習得したスキルを使用できます。
2つどちらか選ぶ選択制にしようかなと考えてます。

マスターコマンドはマスターが行動する強力なコマンドです。
味方は全員ドールでマスターが操作しているという設定です。(マスターは左下ウインドウの女の子)
設定も含めてシステムに落とし込んでいければよいと考えています。



雑な所も含めて月末まで直していきます。

で も ゲ ー ム が し た い で す ビ ル ダ ー ズ 2
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

戦闘画面β2

2022-05-01 12:08:40 | RGSS3
4月の開発成果。

04.18
左上、バトラーの行動順表示。


04.26
右上、マスター情報表示。とりあえず顔のみ。


05.01
基本レイアウトはこんな感じです。
ゲージは極力少なくしてごちゃごちゃしないようにしたいです。


実際動作するのは今月中に動画にしたいです。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

戦闘画面β

2022-04-17 06:15:16 | RGSS3
戦闘画面の進捗。
自作すると仕様理解含めあとあと作りやすそう。
私はCTB方式が好きなので CTB+なにか独自性 を出していきたいです。
リソース関連をできるだけ絞ってシンプルな見た目にしたいな~。

03.29
仕様を理解しつつ軽く触る。


04.02
ターゲットエネミー関連を改造。


04.04
ターゲットアクター関連を改造。


04.12
コマンドウインドウを改造。左右で切り替え可能(画像はスキルコマンド、基本コマンドおよびマスターコマンド?仕様未構築、てけとー)。


スクリプト眺めてたらデフォルトの行動順って
#--------------------------------------------------------------------------
# ● 行動速度の決定
#--------------------------------------------------------------------------
def make_speed
@speed = @actions.collect {|action| action.speed }.min || 0
end
make_speedをsortする様になってるけどAGIが行動順だよね?
これだとスキルの行動補正しか影響しない様に思えるんだけどどっかに書いてるんだろか。

04.19:追記
めちゃくちゃ書いてた。Game_Actionにあったのね。
#--------------------------------------------------------------------------
# ● 行動速度の計算
#--------------------------------------------------------------------------
def speed
speed = subject.agi + rand(5 + subject.agi / 4)
speed += item.speed if item
speed += subject.atk_speed if attack?
speed
end
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

装備画面土台完成

2022-04-03 10:07:46 | RGSS3
カテゴリごとに横に並ぶようにしました。
一次パラメータによる補正で装備品にボーナスが入ります。どこかで見ましたね。
補正の計算式あまり複雑にするとめんどいのでいい感じにまとめたいです。
あとaceって@handlerってやつでコマンド実行する形式になってますがこれすごい便利ですね。
親のシーンクラスのメソッド呼ぶのすごい楽ちん。



コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする