| 赞 | 0 |
| VIP | |
| 好人卡 | |
| 积分 | 1 |
| 经验 | |
| 最后登录 | 2017-8-5 |
| 在线时间 | 138 小时 |
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 138 小时
- 注册时间
- 2011-3-6
- 回帖
- 45
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 sballance 于 2013-11-29 18:26 编辑
----------------------------------------------------------------------------
----------------------------------------------------------------------------
用了柳大的转地图工具之后,在地图编辑界面都是好的。就先举一个例子,就是原来工具里面附带的转好的库。
1.先随便弄一个地图,如图
2.选择下一张地图,这两张地图图块不相同
3.在地图1里面设置玩家初始位置,并设置场所移动事件,如图
4.运行游戏
5.触发事件后场所移动,结果全乱了
6.打开菜单
7.最后,返回游戏的时候吓尿了,地图好了
不知道是什么原因呢?
运行时用到的两个脚本 1.★XP->ACE 通行与遮挡部分
[pre lang="ruby" line="1"]class RPG::Tileset
attr_accessor :id
attr_accessor :name
attr_accessor :tileset_name
attr_accessor :autotile_names
attr_accessor :panorama_name
attr_accessor :panorama_hue
attr_accessor :fog_name
attr_accessor :fog_hue
attr_accessor :fog_opacity
attr_accessor :fog_blend_type
attr_accessor :fog_zoom
attr_accessor :fog_sx
attr_accessor :fog_sy
attr_accessor :battleback_name
attr_accessor :passages
attr_accessor :priorities
attr_accessor :terrain_tags
end
class Game_Map
#--------------------------------------------------------------------------
# ● 通行检查
# bit : 判断通行禁止与否的字节(请参照二进制运算)
#--------------------------------------------------------------------------
def check_passage(x, y, bit)
for i in 0..2
tile_id = all_tiles(x, y)
flag = tileset.flags[tile_id]
if flag & 0x10 != 0 # [☆] : 不影响通行
next if i < 2
end
return true if flag & bit == 0 # [○] : 可以通行
return false if flag & bit == bit # [×] : 不能通行
end
return false # 不能通行
end
end
#==============================================================================
# ■ Game_CharacterEasy
#------------------------------------------------------------------------------
# 管理地图人物的基本类。是所有地图人物类的共通父类。拥有坐标、图片等基本信息。
#==============================================================================
class Game_MapTile
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :id # ID
attr_reader :x # 地图 X 坐标(理论坐标)
attr_reader :y # 地图 Y 坐标(理论坐标)
attr_reader :real_x # 地图 X 坐标(实际坐标)
attr_reader :real_y # 地图 Y 坐标(实际坐标)
attr_reader :tile_id # 图块 ID(0 则无效)
attr_reader :character_name # 行走图文件名
attr_reader :character_index # 行走图索引
attr_accessor :animation_id
attr_accessor :balloon_id
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize
init_public_members
end
def set_static_tile(id, priority)
@static_tile = true
@tile_id = id
@priority = priority
end
def static_tile?
return false if @static_tile == nil
return true
end
#--------------------------------------------------------------------------
# ● 初始化公有成员变量
#--------------------------------------------------------------------------
def init_public_members
@id = 0
@x = 0
@y = 0
@real_x = 0
@real_y = 0
@tile_id = 0
@character_name = ""
@character_index = 0
@animation_id = 0
@balloon_id = 0
end
#--------------------------------------------------------------------------
# ● 移动到指定位置
#--------------------------------------------------------------------------
def moveto(x, y)
@x = x % $game_map.width
@y = y % $game_map.height
@real_x = @x
@real_y = @y
end
#--------------------------------------------------------------------------
# ● 判定优先级“与人物同层”
#--------------------------------------------------------------------------
def normal_priority?
@priority_type == 1
end
#--------------------------------------------------------------------------
# ● 获取画面 X 坐标
#--------------------------------------------------------------------------
def screen_x
$game_map.adjust_x(@real_x) * 32 + 16
end
#--------------------------------------------------------------------------
# ● 获取画面 Y 坐标
#--------------------------------------------------------------------------
def screen_y
$game_map.adjust_y(@real_y) * 32 + 32
end
#--------------------------------------------------------------------------
# ● 获取画面 Z 坐标
#--------------------------------------------------------------------------
def screen_z
100 + (@priority - 1) * 32
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
# 地图人物的精灵。根据 Game_Character 类的实例而产生自动变化。
#==============================================================================
class Sprite_Character < Sprite_Base
alias update_old update unless $@
def update
if @static_tile == nil
@static_tile = @character.is_a?(Game_MapTile)
if @static_tile
super
update_bitmap
update_src_rect
update_position
return
end
elsif @static_tile
super
update_position
return
end
update_old
end
#--------------------------------------------------------------------------
# ● 获取指定图块 ID 的图块组
#--------------------------------------------------------------------------
def tileset_bitmap(tile_id)
if tile_id >= 1536 and tile_id <= 1663 # X6R
pid = 4
else
pid = 5 + tile_id / 256
return if ![5, 6, 7, 8].include?(pid)
end
filename = $game_map.tileset.tileset_names[pid]
tile = Cache.tileset(filename)
return tile
end
end[/pre]
[pre lang="ruby" line="1"]#encoding:utf-8
#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
# 处理地图画面精灵和图块的类。本类在 Scene_Map 类的内部使用。
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize
create_viewports
create_tilemap
create_parallax
create_characters
create_shadow
create_weather
create_pictures
create_timer
update
end
#--------------------------------------------------------------------------
# ● 生成显示端口
#--------------------------------------------------------------------------
def create_viewports
@viewport1 = Viewport.new
@viewport2 = Viewport.new
@viewport3 = Viewport.new
@viewport2.z = 50
@viewport3.z = 100
end
#--------------------------------------------------------------------------
# ● 读取图块地图
#--------------------------------------------------------------------------
def create_tilemap
@tilemap_all = []
@char_tileset = {}
tilemap = Tilemap.new(@viewport1)
tilemap.map_data = xpdata_convert($game_map.data, 1)
@tilemap_all.push(tilemap)
tilemap = Tilemap.new(@viewport1)
tilemap.map_data = xpdata_convert($game_map.data, 2)
@tilemap_all.push(tilemap)
tilemap = Tilemap.new(@viewport1)
tilemap.map_data = xpdata_convert($game_map.data, 3)
@tilemap_all.push(tilemap)
load_tileset
end
def xpdata_convert(orial_data, id)
get_data = orial_data.clone
for x in 0...get_data.xsize
for y in 0...get_data.ysize
for i in 0..2
if $game_map.tileset.priorities[get_data[x, y, i]] > 0 and get_data[x, y, i] != 0
if !@char_tileset.keys.include?(x.to_s + "_" + y.to_s + "_" + i.to_s)
char = Game_MapTile.new
char.set_static_tile( get_data[x, y, i] , $game_map.tileset.priorities[get_data[x, y, i]] )
char.moveto(x, y)
@char_tileset[x.to_s + "_" + y.to_s + "_" + i.to_s] = char
end
get_data[x, y, i] = 0
end
end
case id
when 1
get_data[x, y, 2] = get_data[x, y, 0]
get_data[x, y, 0] = 0
get_data[x, y, 1] = 0
when 2
get_data[x, y, 2] = get_data[x, y, 1]
get_data[x, y, 0] = 0
get_data[x, y, 1] = 0
when 3
get_data[x, y, 0] = 0
get_data[x, y, 1] = 0
end
end
end
return get_data
end
#--------------------------------------------------------------------------
# ● 读取图块组
#--------------------------------------------------------------------------
def load_tileset
@tileset = $game_map.tileset
@tileset.tileset_names.each_with_index do |name, i|
for tilemap in @tilemap_all
tilemap.bitmaps = Cache.tileset(name)
end
end
for tilemap in @tilemap_all
tilemap.flags = @tileset.flags
end
end
#--------------------------------------------------------------------------
# ● 生成远景图
#--------------------------------------------------------------------------
def create_parallax
@parallax = Plane.new(@viewport1)
@parallax.z = -100
end
#--------------------------------------------------------------------------
# ● 生成人物精灵
#--------------------------------------------------------------------------
def create_characters
@character_sprites = []
$game_map.events.values.each do |event|
@character_sprites.push(Sprite_Character.new(@viewport1, event))
end
@char_tileset.values.each do |char|
@character_sprites.push(Sprite_Character.new(@viewport1, char))
end
$game_map.vehicles.each do |vehicle|
@character_sprites.push(Sprite_Character.new(@viewport1, vehicle))
end
$game_player.followers.reverse_each do |follower|
@character_sprites.push(Sprite_Character.new(@viewport1, follower))
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
@map_id = $game_map.map_id
end
#--------------------------------------------------------------------------
# ● 生成飞艇影子
#--------------------------------------------------------------------------
def create_shadow
@shadow_sprite = Sprite.new(@viewport1)
@shadow_sprite.bitmap = Cache.system("Shadow")
@shadow_sprite.ox = @shadow_sprite.bitmap.width / 2
@shadow_sprite.oy = @shadow_sprite.bitmap.height
@shadow_sprite.z = 180
end
#--------------------------------------------------------------------------
# ● 生成天气
#--------------------------------------------------------------------------
def create_weather
@weather = Spriteset_Weather.new(@viewport2)
end
#--------------------------------------------------------------------------
# ● 生成图片精灵
#--------------------------------------------------------------------------
def create_pictures
@picture_sprites = []
end
#--------------------------------------------------------------------------
# ● 生成计时器精灵
#--------------------------------------------------------------------------
def create_timer
@timer_sprite = Sprite_Timer.new(@viewport2)
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
dispose_tilemap
dispose_parallax
dispose_characters
dispose_shadow
dispose_weather
dispose_pictures
dispose_timer
dispose_viewports
end
#--------------------------------------------------------------------------
# ● 释放地图图块
#--------------------------------------------------------------------------
def dispose_tilemap
for tilemap in @tilemap_all do tilemap.dispose end
end
#--------------------------------------------------------------------------
# ● 释放远景图
#--------------------------------------------------------------------------
def dispose_parallax
@parallax.bitmap.dispose if @parallax.bitmap
@parallax.dispose
end
#--------------------------------------------------------------------------
# ● 释放人物精灵
#--------------------------------------------------------------------------
def dispose_characters
@character_sprites.each {|sprite| sprite.dispose }
end
#--------------------------------------------------------------------------
# ● 释放飞艇影子
#--------------------------------------------------------------------------
def dispose_shadow
@shadow_sprite.dispose
end
#--------------------------------------------------------------------------
# ● 释放天气
#--------------------------------------------------------------------------
def dispose_weather
@weather.dispose
end
#--------------------------------------------------------------------------
# ● 释放图片精灵
#--------------------------------------------------------------------------
def dispose_pictures
@picture_sprites.compact.each {|sprite| sprite.dispose }
end
#--------------------------------------------------------------------------
# ● 释放计时器精灵
#--------------------------------------------------------------------------
def dispose_timer
@timer_sprite.dispose
end
#--------------------------------------------------------------------------
# ● 释放显示端口
#--------------------------------------------------------------------------
def dispose_viewports
@viewport1.dispose
@viewport2.dispose
@viewport3.dispose
end
#--------------------------------------------------------------------------
# ● 更新人物
#--------------------------------------------------------------------------
def refresh_characters
dispose_characters
create_characters
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
update_tileset
update_tilemap
update_parallax
update_characters
update_shadow
update_weather
update_pictures
update_timer
update_viewports
end
#--------------------------------------------------------------------------
# ● 监察图块组是否需要被切换
#--------------------------------------------------------------------------
def update_tileset
if @tileset != $game_map.tileset
load_tileset
refresh_characters
end
end
#--------------------------------------------------------------------------
# ● 更新地图图块
#--------------------------------------------------------------------------
def update_tilemap
for tilemap in @tilemap_all
tilemap.ox = $game_map.display_x * 32
tilemap.oy = $game_map.display_y * 32
tilemap.update
end
end
#--------------------------------------------------------------------------
# ● 更新远景图
#--------------------------------------------------------------------------
def update_parallax
if @parallax_name != $game_map.parallax_name
@parallax_name = $game_map.parallax_name
@parallax.bitmap.dispose if @parallax.bitmap
@parallax.bitmap = Cache.parallax(@parallax_name)
Graphics.frame_reset
end
@parallax.ox = $game_map.parallax_ox(@parallax.bitmap)
@parallax.oy = $game_map.parallax_oy(@parallax.bitmap)
end
#--------------------------------------------------------------------------
# ● 更新人物精灵
#--------------------------------------------------------------------------
def update_characters
refresh_characters if @map_id != $game_map.map_id
@character_sprites.each {|sprite| sprite.update }
end
#--------------------------------------------------------------------------
# ● 更新飞艇影子
#--------------------------------------------------------------------------
def update_shadow
airship = $game_map.airship
@shadow_sprite.x = airship.screen_x
@shadow_sprite.y = airship.screen_y + airship.altitude
@shadow_sprite.opacity = airship.altitude * 8
@shadow_sprite.update
end
#--------------------------------------------------------------------------
# ● 更新天气
#--------------------------------------------------------------------------
def update_weather
@weather.type = $game_map.screen.weather_type
@weather.power = $game_map.screen.weather_power
@weather.ox = $game_map.display_x * 32
@weather.oy = $game_map.display_y * 32
@weather.update
end
#--------------------------------------------------------------------------
# ● 更新图片精灵
#--------------------------------------------------------------------------
def update_pictures
$game_map.screen.pictures.each do |pic|
@picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
@picture_sprites[pic.number].update
end
end
#--------------------------------------------------------------------------
# ● 更新计时器精灵
#--------------------------------------------------------------------------
def update_timer
@timer_sprite.update
end
#--------------------------------------------------------------------------
# ● 更新显示端口
#--------------------------------------------------------------------------
def update_viewports
@viewport1.tone.set($game_map.screen.tone)
@viewport1.ox = $game_map.screen.shake
@viewport2.color.set($game_map.screen.flash_color)
@viewport3.color.set(0, 0, 0, 255 - $game_map.screen.brightness)
@viewport1.update
@viewport2.update
@viewport3.update
end
end[/pre]
就是感觉第二个脚本有些奇怪,注释掉之后发现地图不乱了,但是遮挡有问题了。
但是如果不注释掉,遮挡没问题,但是场所移动后(有图块改变的)地图全乱了
附上文件。
不知道该如何解决,先谢谢各位了
|
-
-
|