Project1

标题: 请问如何突破显示图片的图片编号上限? [打印本页]

作者: 幻隐之翼    时间: 2010-8-19 18:05
标题: 请问如何突破显示图片的图片编号上限?
想做一个战棋类一样的,但是画格子一个格子就要一个图片,而允许显示图片的上限是50...如何修改能使显示图片的上限达到200或者更高呢?
PS:在■ Game_Screen里面曾尝试过修改不过最后虽然数量改上去了,但是实际显示图片的时候却卡着显示不出来超过50的编号..请问到底该怎么做呢?这些类的实例本类的实例请参考
# $game_screen这样的应该到哪里去找呢?
或者有什么其他好方法画格子呢?
作者: ★_茄孓    时间: 2010-8-19 20:55
有心很不错啊
用事件做战旗不可取。
画格子还是用脚本
比如事件脚本也可以画只是不好处理呵呵
举个例子画满整个地图
新建个事件用事件功能里的事件脚本
  1. $宽度= 19;$高度 = 14;@s = [];@t = 0
  2. red = Color.new(255,0,0,255)
  3. for i in 0..$宽度
  4. for j in 0..$高度
  5. @s[@t] = Sprite.new
  6. @s[@t].bitmap = Bitmap.new(32,32)
  7. @s[@t].bitmap.fill_rect(0,0,32,32,red)
  8. @s[@t].x = i*32
  9. @s[@t].y = j*32
  10. @t += 1
  11. end
  12. end
复制代码
宽度高度修改看看 仅仅提供思路

作者: BBBBB6    时间: 2010-8-19 21:03
那么标题里说的可不可以实现呢?
作者: 幻隐之翼    时间: 2010-8-19 21:43
其实我通过事件已经能达到4格以内的移动了(因为5格的移动需要1+3+5+7+9+11+9+7+5+3+1>50),所以..如果能突破我就能纯事件来做出来了
作者: 幻隐之翼    时间: 2010-8-19 21:44
另外bitmap类不太懂,还有这样画出格子了怎么取消格子呢?
作者: ★_茄孓    时间: 2010-8-19 21:58
本帖最后由 ★_茄孓 于 2010-8-19 22:05 编辑

加个小变量用把该脚本放到main前即可
  1. class Game_Screen
  2.   attr_accessor   :sprites
  3. #--------------------------------------------------------------------------
  4.   # ● 初试化对像
  5.   #--------------------------------------------------------------------------
  6.   def initialize
  7.     @sprites = []
  8.     @tone = Tone.new(0, 0, 0, 0)
  9.     @tone_target = Tone.new(0, 0, 0, 0)
  10.     @tone_duration = 0
  11.     @flash_color = Color.new(0, 0, 0, 0)
  12.     @flash_duration = 0
  13.     @shake_power = 0
  14.     @shake_speed = 0
  15.     @shake_duration = 0
  16.     @shake_direction = 1
  17.     @shake = 0
  18.     @pictures = [nil]
  19.     for i in 1..100
  20.       @pictures.push(Game_Picture.new(i))
  21.     end
  22.     @weather_type = 0
  23.     @weather_max = 0.0
  24.     @weather_type_target = 0
  25.     @weather_max_target = 0.0
  26.     @weather_duration = 0
  27.   end
  28. end
复制代码
然后在事件脚本里用下面脚本来显示图片

  1. @id = 2010
  2. $game_screen.sprites[@id] = Sprite.new
  3. pic = $game_screen.sprites[@id]
  4. pic.bitmap = RPG::Cache.picture("图片名")
  5. pic.x = 100 ; pic.y = 100
  6. pic.zoom_x = 1
  7. pic.zoom_y = 1
  8. pic.opacity = 255
  9. pic.blend_type = 0
  10. pic.angle = 0
复制代码
里面数值相应改变下即可了。
用下面的脚本来消除图片
  1. @id = 2010
  2. $game_screen.sprites[@id].dispose
复制代码
下面是范例工程
Project24.rar (271.47 KB, 下载次数: 151)
作者: 幻隐之翼    时间: 2010-8-19 22:03
谢谢,我试试看呵
作者: 幻隐之翼    时间: 2010-8-19 22:14
    for i in 1..100
这个范围能扩大么?
作者: 逸豫    时间: 2010-8-19 23:17
本帖最后由 逸豫 于 2010-8-19 23:18 编辑

好吧……汝不累么……
此乃无视事件的方法:
$sprites[N] = Sprite.new
$sprites[N].bitmap = Bitmap.new("图片路径+名称")
$sprites[N].x = X
$sprites[N].y = Y
这个是很老实的方法:
  1. class Spriteset_Map
  2.   alias diyrpg_i initialize
  3.   def initialize
  4.     diyrpg_i
  5.     for i in 100...200
  6.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  7.         $game_screen.pictures[i]))
  8.     end
  9.   end
  10. end
  11. class Game_Screen
  12.   alias diyrpg_u update
  13.   def update
  14.     diyrpg_u
  15.     unless $game_temp.in_battle
  16.       for i in 100...200
  17.         @pictures[i].update
  18.       end
  19.     end
  20.   end
  21.   alias diyrpg_i initialize
  22.   def initialize
  23.     diyrpg_i
  24.     for i in 100...200
  25.       @pictures.push(Game_Picture.new(i))
  26.     end
  27.   end
  28. end
复制代码
调用方式在此:$game_screen.pictures[图片编号100~199].show("图片名",原点 0左上 1中心,
X,Y, X放大率,Y放大率,不透明度, 合成方式 0普通1加法2减法)
作者: 幻隐之翼    时间: 2010-8-19 23:52
关键无视事件的我不知道怎么消除图片呢= =
作者: 幻隐之翼    时间: 2010-8-20 11:52
怎么调整透明度呢= =我先试试..不知道事件页能不能用这样的代码..
作者: 幻隐之翼    时间: 2010-8-20 13:36
我已经用我自己的暴力的方法解决了= =原来是这边忘了改了..
    # 生成图片
    @picture_sprites = []
    for i in 1..500
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
        $game_screen.pictures[i]))
    end
在Spriteset_Map里..
作者: 幻隐之翼    时间: 2010-8-20 14:07
不过还是谢谢大家了




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1