cocos加载tmx地图,生成成功但并无显示

cocos加载tmx地图,生成成功但并无显示,第1张

你留意一下你的代码createScene处是否调用create方法。你这个有可能就是没有调用该方法导致没有执行init完成初始化,也就没有调用到加载TMX文件的方法。你可以通过设置调试点到加载TMX文件的方法,很快就能定位出现问题的原因。希望能帮到遇到这个问题的人。

NPC头上显示名字的脚本:(首先对楼上吐槽无力……)

# 使用方法:插入到main前即可,之后就会显示每个事件的名字。

# 不想显示名字的NPC直接把名字设置为一个空格就行了。

#

# 附加功能:名字颜色区分:比如一个NPC的名字是 小龙,2 就会用2号颜色(红色)显示

#

# 修改NPC名的方法:$game_map.events[事件ID编号].name =

# 比如某个宝箱,原名宝箱,打开后名为“打开的宝箱”,则

# $game_map.events[@event_id].name = "打开的宝箱" 或者

# $game_map.events[2].name = "打开的宝箱" (假设宝箱是2号事件)

#

# 修改颜色定义:70-88行,131-149行,自己随便改。

#

# 给主角带上名字:192行,改 "" 为 "主角" 或者 $game_party.actors[0].name 即可

#

# 是否显示姓名的开关:157行,开头的井号去掉。则以后39号开关打开的时候才会显示姓名

#

#==============================================================================

# ■ Game_Event

#------------------------------------------------------------------------------

# 处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能

# 在 Game_Map 类的内部使用。

#==============================================================================

class Game_Event <Game_Character

#——————————————————————————————————————

# 用来返回名称

#——————————————————————————————————————

def name

return @event.name

end

def name=(newname)

@event.name = newname

end

end

#==============================================================================

# ■ Sprite_Character

#------------------------------------------------------------------------------

# 角色显示用脚本。监视 Game_Character 类的实例、

# 自动变化脚本状态。

#==============================================================================

class Sprite_Character <RPG::Sprite

def dispose

super

@namesprite.dispose unless @namesprite.nil?

end

#--------------------------------------------------------------------------

# ● 定义实例变量

#--------------------------------------------------------------------------

attr_accessor :character# 角色

#--------------------------------------------------------------------------

# ● 初始化对像

# viewport : 查看端口

# character : 角色 (Game_Character)

#--------------------------------------------------------------------------

def initialize(viewport, character = nil)

name = character.name

super(viewport)

@character = character

@namesprite = Sprite.new

@namesprite.bitmap = Bitmap.new(160, 48)

@namesprite.bitmap.font.name = "黑体"

@namesprite.bitmap.font.size = 15

@namesprite.bitmap.font.color.set( 30, 255, 0)

@evname = name

@evname_split = name.split(/,/)[0]

if name[0, 2]=="EV"

@evname_split = " "

end

if name.split(/,/)[1] != nil

case name.split(/,/)[1]

when "0"

@namesprite.bitmap.font.color.set(255, 255, 255)

when "1"

@namesprite.bitmap.font.color.set(120, 120, 120)

when "2"

@namesprite.bitmap.font.color.set(255, 0, 0)

when "3"

@namesprite.bitmap.font.color.set( 30, 255, 0)

when "4"

@namesprite.bitmap.font.color.set( 0, 112, 221)

when "5"

@namesprite.bitmap.font.color.set(163, 53, 238)

when "6"

@namesprite.bitmap.font.color.set(247, 102, 0)

when "7"

@namesprite.bitmap.font.color.set(255, 210, 0)

else

@namesprite.bitmap.font.color.set(255, 255, 255)

end

end

if @evname_split != "" and @evname_split != nil

@namesprite.bitmap.draw_text(0, 0, 160, 36, @evname_split, 1)

end

update

end

#--------------------------------------------------------------------------

# ● 更新画面

#--------------------------------------------------------------------------

def update

super

# 元件 ID、文件名、色相与现在的情况存在差异的情况下

if @tile_id != @character.tile_id or

@character_name != @character.character_name or

@character_hue != @character.character_hue

# 记忆元件 ID 与文件名、色相

@tile_id = @character.tile_id

@character_name = @character.character_name

@character_hue = @character.character_hue

# 元件 ID 为有效值的情况下

if @tile_id >= 384

self.bitmap = RPG::Cache.tile($game_map.tileset_name,

@tile_id, @character.character_hue)

self.src_rect.set(0, 0, 32, 32)

self.ox = 16

self.oy = 32

# 元件 ID 为无效值的情况下

else

self.bitmap = RPG::Cache.character(@character.character_name,

@character.character_hue)

@cw = bitmap.width / 4

@ch = bitmap.height / 4

self.ox = @cw / 2

self.oy = @ch

end

end

if @evname != @character.name

@namesprite.bitmap.clear

@evname = @character.name

@evname_split = @character.name.split(/,/)[0]

if @character.name.split(/,/)[1] != nil

case @character.name.split(/,/)[1]

when "0"

@namesprite.bitmap.font.color.set(255, 255, 255)

when "1"

@namesprite.bitmap.font.color.set(120, 120, 120)

when "2"

@namesprite.bitmap.font.color.set(255, 0, 0)

when "3"

@namesprite.bitmap.font.color.set( 30, 255, 0)

when "4"

@namesprite.bitmap.font.color.set( 0, 112, 221)

when "5"

@namesprite.bitmap.font.color.set(163, 53, 238)

when "6"

@namesprite.bitmap.font.color.set(255, 128, 0)

when "7"

@namesprite.bitmap.font.color.set(229, 204, 128)

else

@namesprite.bitmap.font.color.set(255, 255, 255)

end

end

if @evname_split != "" and @evname_split != nil

@namesprite.bitmap.draw_text(0, 0, 160, 36, @evname_split, 1)

end

end

@namesprite.x = self.x-80

@namesprite.y = self.y-self.oy-24

# @namesprite.visible = $game_switches[1]

# 设置可视状态

self.visible = (not @character.transparent)

# 图形是角色的情况下

if @tile_id == 0

# 设置传送目标的矩形

sx = @character.pattern * @cw

sy = (@character.direction - 2) / 2 * @ch

self.src_rect.set(sx, sy, @cw, @ch)

end

# 设置脚本的坐标

self.x = @character.screen_x

self.y = @character.screen_y

self.z = @character.screen_z(@ch)

# 设置不透明度、合成方式、茂密

self.opacity = @character.opacity

self.blend_type = @character.blend_type

self.bush_depth = @character.bush_depth

# 动画

if @character.animation_id != 0

animation = $data_animations[@character.animation_id]

animation(animation, true)

@character.animation_id = 0

end

end

end

#==============================================================================

# ■ Game_Player

#------------------------------------------------------------------------------

# 处理主角的类。事件启动的判定、以及地图的滚动等功能。

# 本类的实例请参考 $game_player。

#==============================================================================

class Game_Player <Game_Character

def name

return $game_party.actors[0].name

end

end

一、创建瓦片地图

1.在 Hierarchy 窗口中,右键单击一个空白位置。

2.从上下文菜单中选择 2D Object >Tilemap

此时将在 Hierarchy 窗口中创建两个游戏对象:

<1> Grid(网格):顾名思义,场景中的网格可用于将游戏对象均匀地放置在网格单元格中

<2>Tilemap(瓦片地图):此瓦片地图是网格的子游戏对象。瓦片地图由瓦片 (Tiles) 组成;在本教程中,可将瓦片视为特殊精灵

二:创建新瓦片

1、在 Project 窗口中,选择 Assets >Art

2、创建文件夹 Tiles 存放瓦片

3、在Tiles下创建瓦片

右键 >Crete >Tile 并命名(例如:FirstTile)

4、在 Inspector 中,可以看到瓦片资源的属性。此处包括一个 Sprite 字段(瓦片将绘制此精灵)

三、将精灵分配给FirstTile

1、选中FirstTile

2、在 Inspector 中,单击 Sprite 属性右侧的圈选按钮。此时将打开一个对话窗口,其中会显示你的项目的所有精灵。选择刚保存在 Project 中的一个精灵。(或者精灵直接拖过去)

四:将FirstTile 添加到你的面板 

Unity 使用面板 (Palette) 来定义在瓦片地图的哪个单元格中渲染哪个瓦片。你的瓦片地图就像是画布,瓦片则像是你的颜色。你可以将瓦片置于面板上,这样你就可以拾取瓦片并将瓦片应用于瓦片地图。

要将 FirstTile 添加到面板,请执行以下 *** 作:

1、选择 Window >2D >Tile palette。此时将打开 Tile Palette 窗口:

2、选择 Create New Palette。随即将出现一个窗口,允许你设置面板 (给面板起名字)Create

3、将新面板保存在 Tile 文件夹中(Art 下的文件夹,用于存放面板)

4、将瓦片(FirstTile)拖到面板中心(你想放置的位置,自己排版)

5、你的瓦片将显示在面板的网格中。单击瓦片以将其选中

6、从 Tile Palette 顶部的工具栏中,选择画笔工具

现在,可以在 Scene 视图内的网格上进行绘制

此时需要调整精灵适应网络(这样就要求出图像素要一致)

五:瓦片精灵适应网格

1、将Grid游戏对象, x he y 设置为 1 (每个单元格的宽度 he 高 度为 1 个单位)

2、在 Project 窗口中,选择瓦片精灵

“Pixels per Unit”通过定义 1 个单位内应该设置的像素数量来告知 Unity 如何设置精灵的大小。 这个根据图的大小来确定

五:瓦片集制作

1、点击大图可以看到此时就一张精灵, 比如下面一张大图本来下面就一个精灵 现在 分成了9个 可以看到他的像素本来是 192 * 192 

 (这样作图时需要注意的,比如我们一个单位是64像素,图集要是整数倍) 

把本来的 SpriteMode 从 Single 改为 Multiple . 

点击Sprite Editor (d出下面小图)

进行拆分 .在 Inspector 中,单击 Sprite Editor 按钮 > 单击 Slice > 使用下拉菜单将 Type 字段设置为 Grid by Cell Count > 将 Column &Row 值(包括 C 和 R)设置为 3  >单击 Slice > 单击 Apply

这样就将这张大图 3 * 3 分成了9个

九:将精灵分配给瓦片

Window >2D >Title Palette >d出面板 >右侧的图集拖到面板

调整绘制顺序 (调整地图渲染顺序)

Order in Layer 调整层级 越大 渲染越往后 比如 地图是 -10 玩家是 0 玩家就可以在地图上走,否则地图就盖住了玩家。

此时需要确定的就是 一个单图的大小 图集是确定单图n倍

特别注意的是,unity 创建的一定要是 2D项目,不可以是3D


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11433693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存