赞 | 42 |
VIP | 91 |
好人卡 | 5 |
积分 | 110 |
经验 | 80759 |
最后登录 | 2024-11-5 |
在线时间 | 4426 小时 |
Lv4.逐梦者
- 梦石
- 1
- 星屑
- 9982
- 在线时间
- 4426 小时
- 注册时间
- 2005-10-22
- 帖子
- 6941
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
ARPG游戏的性能要求逼迫着偶去做性能优化 囧
于是,发现了以下几个提高性能的处理方案:
1,美兽每次丢出新事件都访问一次硬盘并且去读出其中的地图事件数据,于是捏,其实我们可以一次把数据全读到内存上(读内存比读硬盘快……)
拿偶正在欢乐地做的僵尸剧情举例:
map = load_data(sprintf("Data/Map%03d.rxdata", 299))
temp = Marshal.load(Marshal.dump(map))
@zombie = []
@zombie.push(temp.events[3])
@zombie.push(temp.events[5])
@zombie.push(temp.events[6])
@zombie.push(temp.events[7])
@zombie.push(temp.events[8])
丢僵尸时就……
def z_spawn(x,y,type = 0)
if !$game_system.map_events_number
$game_system.map_events_number = {}
end
sum = $game_system.map_events_number
m_id = $game_map.map_id
sum[m_id] == nil ? sum[m_id] = 2000 : sum[m_id] += 1
new_event_id = sum[m_id]
case type
when 0
temp = @zombie[rand(@zombie.size)].clone
end
temp.id = new_event_id
temp.x,temp.y = x,y
$game_map.events[new_event_id] = Game_Event.new(m_id,temp)
update_spr(new_event_id)
return new_event_id
end
呃……没有REFRESH_MAP,而是出现了个update_spr,这个是虾米呢?
偶再继续丢代码
def update_spr(id)
sprite = Sprite_Character.new($scene.spriteset.viewport1, $game_map.events[id])
$scene.spriteset.character_sprites.push(sprite)
end
于是,你看见了第2个性能优化点。
美兽原来要把地图的spriteset全清了重来,于是 偶就卡得囧囧有神鸟~
其实貌似其实不必把全部的spriteset干掉……
对应的,我们在删除事件时也改了改
def self.delete_events(event_id,ref = true)
return unless self.is_map?
if ref == true
#self.refresh_map
#$scene.spriteset.character_sprites.delete(sprite)
$game_map.need_refresh = true
for i in $scene.spriteset.character_sprites
if i.character == $game_map.events[event_id]
i.dispose
$scene.spriteset.character_sprites.delete(i)
end
end
end
$game_map.events.delete(event_id)
end
加参数是为了留点尸体 囧
OK,基本上写完了,偶继续潜下去乱丢僵尸玩吧 |
|