设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

请教关于 viewport的问题

查看数: 1290 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2012-3-27 22:24

正文摘要:

本帖最后由 skyjjwan 于 2012-3-28 17:38 编辑 本人新人刚接触不久 问的问题都很白很白 所以很莫名的就又有了个问题 关于viewport这个 在脚本里 有很多脚本都用到了viewport  假如2个脚本 脚本1和脚本2 ...

回复

消失的三千 发表于 2012-3-28 15:42:49
本帖最后由 消失的三千 于 2012-3-28 18:12 编辑
skyjjwan 发表于 2012-3-28 06:14
看了你的回答 貌似有一点理解了  这么说的话是画面显示优先级的问题吗?


这貌似看导入Viewport的次序了
优先级可以通过修改z坐标来更改



没有仔细研究过KGC的脚本,所以解决方法不明= =
在这里推荐个比较美观而且可和横版通用的脚本(顺带说说,这貌似文不对题= =)
  1. #==============================================================================
  2. # ★RGSS2
  3. # STR15_Enemy HP Gauge v1.1a
  4. # By star:http://strcatyou.u-abel.net/
  5. # Translated by Mr. Bubble
  6. #
  7. # ・Show HP gauge of enemies when hit.
  8. # ・You can hide a specified enemy's HP gauge by adding "HIDEHP" to
  9. # the enemy's Notes field in the Database.
  10. # ・Updated with a back attack fix by Moonlight.  Use this version ONLY with the
  11. #  ATB+SBS scripts.
  12. #------------------------------------------------------------------------------

  13. #==============================================================================
  14. # ★このスクリプトの機能を有効にする
  15. if true
  16. #==============================================================================
  17. # ■ Sprite_Battler
  18. #==============================================================================
  19. class Sprite_Battler < Sprite_Base
  20.   # Word used in enemy Notes field to hide HP gauge
  21.   GAUGE_M = "HIDEHP"
  22.   # Gauge back color [Border color, Inside color]
  23.   GAUGE_BC = [Color.new(0,0,0), Color.new(32,48,64)]
  24.   # Color gradient [Left, Right]
  25.   GAUGE_GC = [Color.new(64,128,96), Color.new(96,192,160)]
  26.   #
  27.   GAUGE_W = 70 # Gauge width
  28.   GAUGE_H = 6 # Gauge height
  29.   GAUGE_S = 8 # Gauge speed (more than 2)
  30.   GAUGE_T = 640 # Gauge display length (more 510)
  31.   GAUGE_O = 16 # Gauge opacity
  32.   #
  33.   GAUGE_V = false # STR cursor appears when damaged. Requires STRxx Cursor.                  # ※XP風バトルを導入してない場合は有効にしないでください
  34.   #--------------------------------------------------------------------------
  35.   # ● ゲージスプライト作成(追加)
  36.   #--------------------------------------------------------------------------
  37.   def create_enhpgauge
  38.     g_width = GAUGE_W  # 幅
  39.     g_height = GAUGE_H # 高さ
  40.     f_color = GAUGE_BC # ゲージバックカラー
  41.     g_color = GAUGE_GC # ゲージカラー
  42.     # ビットマップ作成
  43.     bitmap = Bitmap.new(g_width, g_height * 2)
  44.     # 上半分:ゲージバック
  45.     bitmap.fill_rect(0, 0, g_width, g_height, f_color[0])         # 枠外
  46.     bitmap.fill_rect(1, 1, g_width - 2, g_height - 2, f_color[1]) # 枠内
  47.     # 下半分:グラデゲージ
  48.     bitmap.gradient_fill_rect(1, g_height + 1, g_width - 2, g_height - 2,
  49.                               g_color[0], g_color[1])             # グラデ
  50.     # スプライト作成 # [0] = ゲージバック; [1] = ゲージ
  51.     @hp_gauge = [Sprite.new, Sprite.new]
  52.     for i in 0..1
  53.       sprite = @hp_gauge[i]
  54.       sprite.viewport = self.viewport
  55.       sprite.bitmap = bitmap
  56.       sprite.src_rect.set(0, 0, g_width, g_height)
  57.       sprite.src_rect.y = g_height if i == 1
  58.       if $back_attack && N01::BACK_ATTACK && N01::BACK_ATTACK_NON_BACK_MIRROR
  59.         sprite.x = Graphics.width - @battler.screen_x
  60.       else
  61.         sprite.x = @battler.screen_x
  62.       end
  63.       sprite.y = @battler.screen_y - 8
  64.       sprite.ox = g_width / 2
  65.       sprite.oy = g_height / 2
  66.       sprite.z = 200
  67.       sprite.z += 20 if i == 1
  68.       sprite.opacity = 0
  69.     end
  70.     # いろいろ
  71.     @enid = @battler.enemy_id
  72.     @hp = @battler.hp
  73.     @gauge_width = GAUGE_W + 1
  74.     @gauge_opacity = 0
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● ゲージ更新(追加)
  78.   #--------------------------------------------------------------------------
  79.   def enhpgauge_update
  80.     # エネミーIDが変動していたらメモの内容を再取得・可視状態も更新
  81.     if @enid != @battler.enemy_id
  82.       @enid = @battler.enemy_id
  83.       @gauge_visible = true
  84.       @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
  85.       for i in @hp_gauge do i.visible = @gauge_visible end
  86.       end
  87.     return unless @gauge_visible
  88.     # ゲージ更新
  89.     if @hp != @battler.hp
  90.       g_width = (@battler.hp / (@battler.maxhp * 1.0))
  91.       @gauge_width = ((GAUGE_W * g_width) + 1).truncate
  92.       @gauge_opacity = GAUGE_T
  93.       @hp = @battler.hp
  94.     end
  95.     # 幅
  96.     g_width = @hp_gauge[1].src_rect.width
  97.     speed = GAUGE_S
  98.     rect = @hp_gauge[1].src_rect
  99.     rect.width = (@gauge_width + (g_width * (speed - 1))) / speed
  100.     if rect.width != @gauge_width
  101.       if rect.width > @gauge_width
  102.         rect.width -= 1
  103.       else
  104.         rect.width += 1
  105.       end
  106.     end
  107.     rect.width = 2 if rect.width <= 1 and @hp > 0
  108.     # 透明度
  109.     if GAUGE_V and @battler.cursor_flash
  110.       @gauge_opacity += GAUGE_O * 2 if @gauge_opacity <= GAUGE_T / 2
  111.     else
  112.       @gauge_opacity -= GAUGE_O if @gauge_opacity > 0
  113.     end
  114.     # 透明度適用
  115.     for i in @hp_gauge do i.opacity = @gauge_opacity end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● オブジェクト初期化(エイリアス)
  119.   #--------------------------------------------------------------------------
  120.   alias initialize_str15 initialize
  121.   def initialize(viewport, battler = nil)
  122.     initialize_str15(viewport, battler)
  123.     if @battler.is_a?(Game_Enemy)
  124.       create_enhpgauge
  125.       @gauge_visible = true
  126.       @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
  127.       for i in @hp_gauge do i.visible = @gauge_visible end
  128.     end
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 解放(エイリアス)
  132.   #--------------------------------------------------------------------------
  133.   alias dispose_str15 dispose
  134.   def dispose
  135.     dispose_str15
  136.     if @battler.is_a?(Game_Enemy)
  137.       @hp_gauge[0].bitmap.dispose
  138.       @hp_gauge[0].dispose
  139.       @hp_gauge[1].dispose
  140.     end
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● フレーム更新(エイリアス)
  144.   #--------------------------------------------------------------------------
  145.   alias update_str15 update
  146.   def update
  147.     update_str15
  148.     enhpgauge_update if @battler.is_a?(Game_Enemy)
  149.   end
  150. end
  151. #
  152. end
复制代码

点评

虽然答非所问 但是却是给我了我最需要的东西啊啊 感谢 我试试  发表于 2012-3-28 17:07
请问能具体一点吗? 我有点不明白 我把血条脚本在脚本页放在横版战斗脚本的前面也不行呢 如果修改Z坐标 该在哪里增加?  发表于 2012-3-28 15:48
skyjjwan 发表于 2012-3-28 06:14:49
消失的三千 发表于 2012-3-28 04:59
viewport就是显示端口的类,类似荧幕的东西

Viewport.new(x坐标, y坐标, 荧幕宽, 荧幕高)

看了你的回答 貌似有一点理解了  这么说的话是画面显示优先级的问题吗?

点评

帖子已编辑  发表于 2012-3-28 16:50
消失的三千 发表于 2012-3-28 04:59:01
viewport就是显示端口的类,类似荧幕的东西

Viewport.new(x坐标, y坐标, 荧幕宽, 荧幕高)
用这个可以限制窗口的显示

至于KGC的敌人血条不显示,已经解决了吗?

点评

还是没有解决呢  发表于 2012-3-28 06:12
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 23:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表