Project1
标题:
求教一个效果的实现方法,SLG用
[打印本页]
作者:
Innelysion
时间:
2011-4-19 16:45
标题:
求教一个效果的实现方法,SLG用
本帖最后由 Innelysion 于 2011-4-19 16:46 编辑
tempa.jpg
(236.09 KB, 下载次数: 3)
下载附件
保存到相册
temp
2011-4-19 16:38 上传
如上图那样,类似flash_data的样子,但可用自定义的不同图片(能用动画/循环图片的话更好)而且不会掉帧得太厉害……球实现方法或制作思路,先谢了……
作者:
moy
时间:
2011-4-19 19:58
不太理解什么意思...不过可以参考一些现成的战棋脚本看看人家怎么写的.
作者:
禾西
时间:
2011-4-20 06:30
有些東西因為太簡單而大家不屑于使用,我們只好把他放在黑幕當中~
http://rpg.blue/thread-84595-1-1.html
當然,速度沒有經過優化。
影響幀率的最大兇手是 zoom、angle、和 mirror,你把某四行注釋掉還是很快的。二十五個動畫左右不怎麼掉幀,一百個大概還能有15幀- -b
作者:
Innelysion
时间:
2011-4-20 17:20
本帖最后由 Innelysion 于 2011-4-20 17:21 编辑
>moy
就是地图图块上附带一层或数层额外的图形,必要的时候描绘出来或者事先全部生成,必要时再显示出来,用于标示特殊地区或移动攻击范围啥的……自带的flash_data因为找不到比较完善的tilemap重写所以难以达到需要的效果……
>禾西
啊啊禾西大已经救过我不止一次了vT
这个动画加强脚本已经在用了!一些界面和特效类的地方能极大提高视觉效果(差点想做全动画菜单)!!但像这些用处一次要大量生成该怎么写,还有脚本里的坐标是相对于屏幕的,怎么能让其锚定在图块上……
我还有另外一种想法是在整个地图上覆盖额外几层自动元件(4帧动画已经够了),需要的时候显示其中的一部分。不过还是那个……写脚本苦手vT
作者:
禾西
时间:
2011-4-21 12:06
站上有重寫 tilemap 的范例- -。
不過其實生成一個和地圖等大的viewport,把viewport的x值和y值和地圖的display_x、display_y掛鉤(計算程序在Spriteset_Map中),然後用這個viewport來生成批量動畫(雙重的 for 語句),然後就可以了。viewport移動,內部的sprite也會移動的。
當然還能用自動元件做,怎麼修改地圖元件,看遠景圖做地圖的教程吧,置頂帖有傳送門。
作者:
心雪
时间:
2011-4-21 16:03
本帖最后由 心雪 于 2011-4-21 16:29 编辑
class Game_Character
#------------------------------------------------------
# ● 可以到达的位置
# ! 返回数组
# ! 递归调用
# x 当前x坐标
# y 当前y坐标
# s 当前步数
# a 当前数组 初始调用设置为nil
#------------------------------------------------------
def can_get(x = @x,y = @y,s = 10,a = nil)
#如果当前位置被用更少的步数走过,返回
if a == nil
a = Table.new($game_map.width,$game_map.height)
for i in 0...a.xsize
for j in 0...a.ysize
a[i,j] = -1
end
end
end
if a[x,y] != nil
if a[x,y] >= s
return a
end
end
#如果步数用尽,返回
if s < 0
return a
end
#添加当前位置
a[x,y] = s
#如果右方可以通行
if x < $game_map.width - 1
if passable?(x,y,6)
can_get(x+1,y,s-1,a)
end
end
#如果左方可以通行
if x > 0
if passable?(x,y,4) && x > 0
can_get(x-1,y,s-1,a)
end
end
#如果上方可以通行
if y < $game_map.height - 1
if passable?(x,y,2)
can_get(x,y+1,s-1,a)
end
end
#如果下方可以通行
if passable?(x,y,8) && y > 0
can_get(x,y-1,s-1,a)
end
return a
end
end
class Game_Map
attr :color_area
attr :need_refresh_color,true
alias _snow_heart_setup setup
def setup(*arg)
_snow_heart_setup(*arg)
@color_area = Table.new(width,height)
@need_refresh_color = false
end
def color_area=(v)
@color_area = v
@need_refresh_color = true
end
end
class Spriteset_Map
alias _snow_heart_initialize_ initialize
def initialize
_snow_heart_initialize_
@color_sprite = []
end
alias _snow_heart_update_ update
def update
update_color
_snow_heart_update_
end
def update_color
#刷新图片,添加动画可以在这里写
if $game_map.need_refresh_color
refresh_color
$game_map.need_refresh_color = false
end
end
def refresh_color
for i in @color_sprite
i.dispose
end
for i in 0...$game_map.color_area.xsize
for j in 0...$game_map.color_area.ysize
if $game_map.color_area[i,j] > 0
sc = Sprite.new(@viewport1)
sc.z = 0
sc.bitmap = Bitmap.new(32,32)
sc.bitmap.fill_rect(0,0,32,32,Color.new(0,0,255,128)) #此处可修改风格
sc.x = (i*128 - $game_map.display_x + 3) / 4 + 16
sc.y = (j*128 - $game_map.display_y + 3) / 4 + 32
sc.ox = 16
sc.oy = 32
@color_sprite.push(sc)
end
end
end
end
end
复制代码
制作SLG是个非常麻烦的工程……Good Luck
测试方法:
$game_map.color_area = $game_player.can_get
把脚本从VX改到XP好纠结=,=
------------------------------------------------------------
发现一错误……已修改,注释不小心写错了导致转成XP脚本时写错方向……看来注释也是不能马虎呢~
作者:
Innelysion
时间:
2011-4-22 17:38
谢谢禾西和心雪的指点,今天一早等小圆脸等到忘记看了,脚本和思路收回去慢慢磨……
自己用RM做SLG的确是太蛋痛了,到时看看ttp://www.hitpoints.net/tcv2/index.html这个软件好不好用……
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1