tmlib-rpg 맵의 이동 제한이라든지 타이틀 장면이라든지 만들었습니다.
17409 단어 tmlib.jsCoffeeScript
우선 타일 세트에서의 이동 제한
VX Ace에서는 비트 연산이었지만 어쨌든 배열에
# 移動制限定数、移動できる方向が true
# 方向は [2,4,6,8] の位置パラメータ
# VXAce にならって乗り物も入れるか…?
MOVE_RESTRICTION = {
ALLOK: [true,true,true,true]
UPOK: [false,false,false,true]
DOWNOK: [true,false,false,false]
LEFTOK: [false,true,false,false]
RIGHTOK: [false,false,true,false]
ALLNG: [false,false,false,false]
HORIZON: [false,true,true,false]
VERTICAL: [true,false,false,true]
CORNER1: [false,false,true,true]
CORNER3: [false,true,false,true]
CORNER7: [true,false,true,false]
CORNER9: [true,true,false,false]
UPNG: [true,true,true,false]
DOWNNG: [false,true,true,true]
LEFTNG: [true,false,true,true]
RIGHTNG: [true,true,false,true]
}
이제 여러가지 힘들어 ^^
실제로, 이 값을 사용하는 것은 내부이므로, 별로 신경 쓰지 않을지도 모르지만, 이름이 특히 힘들다…
예를 들어 HORIZON은 수평으로 통과할 수 있을까? 통과 할 수 없습니까? 라든지 (OK라든지 NG라든지 붙이고 있지만… 엄청…)
본래는 xml 로 MapSheet 로 설정됩니다만, 여기서는 json 로 우선. 라고 할까 JavaScript의 Object.
xml의 경우 tilesets 요소에 이미지에서 타일 세트를 지정했지만 이동 제한으로 restriction을 추가했습니다.
이것은 타일 ID에 대응하는 이동 가능 방향을 설정한다.
'sample.tileset': 'img/test_tileset.png'
'sample.mapsheet':
tilesets: [
_type: 'tmx'
width: 30
height: 30
tilewidth: 32
tileheight: 32
tilesets: [
{
image: 'sample.tileset'
restriction: [
MOVE_RESTRICTION.ALLOK
MOVE_RESTRICTION.ALLNG
MOVE_RESTRICTION.UPOK
MOVE_RESTRICTION.DOWNOK
MOVE_RESTRICTION.LEFTOK
MOVE_RESTRICTION.RIGHTOK
MOVE_RESTRICTION.HORIZON
MOVE_RESTRICTION.VERTICAL
MOVE_RESTRICTION.CORNER1
MOVE_RESTRICTION.CORNER3
MOVE_RESTRICTION.CORNER7
MOVE_RESTRICTION.CORNER9
MOVE_RESTRICTION.UPNG
MOVE_RESTRICTION.DOWNNG
MOVE_RESTRICTION.LEFTNG
MOVE_RESTRICTION.RIGHTNG
]
}
]
테스트용 타일 세트
그리고는, 뭐~여러가지 노력하고 있습니다.
Character.coffee
# 移動可能判定
# TODO: ななめどしよ
isPassable: (x, y, d) ->
# マップの取得
map = rpg.system.scene.map
# 向き指定が文字列の場合は、数値に
d = CHARACTER_DIRECTION[d] if typeof d is 'string'
# 向き設定インデックスの計算 2,4,6,8 と言うのを、0,1,2,3 に
di = d / 2 - 1
# 移動先座標の計算
nx = x + X_ROUTE[di]
ny = y + Y_ROUTE[di]
# マップ範囲チェック
return false if not map.isValid(nx,ny)
# 移動可能チェック
return false if not map.isPassable(x,y,d)
# 向きを逆に
rd = REVERSE_DIRECTION[di]
return false if not map.isPassable(nx,ny,rd)
true
Map.coffee
# マップ範囲内かどうか
isValid: (x, y) -> 0 <= x and x < @width and 0 <= y and y < @height
# 移動可能判定
isPassable: (x, y, d) ->
r = @_restriction(x,y)
r[d / 2 - 1]
# 移動制限情報の取得
_restriction: (x, y) ->
# TODO: イベントから見つかったらそれを返す
# TODO: マップ固有情報から見つかったらそれを返す
# タイルセットから
@_restrictionTileset(x, y)
_restrictionTileset: (x, y) ->
i = @mapSheet.layers.length - 1
while i >= 0
layer = @mapSheet.layers[i--]
if layer.type == 'layer'
tileid = layer.data[x + y * @width]
if tileid >= 0
return @mapSheet.tilesets[0].restriction[tileid]
MOVE_RESTRICTION.PASS
지금 보고 생각했지만, 오토 타일의 이동 제한을 생각하지 않아…
그리고 타이틀 장면도 만들고 있습니다.
'scene.title':
_type: 'json'
background:
image: 'scene.title.background.image'
menus: [{
name:'Start'
next:
scene:'SceneMap'
},{
name:'Continue'
next:
scene:''
},{
name:'Exit'
next:
scene:''
}
]
기본적으로 JavaScript는 쓰지 않고 RPG를 만들 수 있게 되지만, json 의 정리라든지 다시 하고 있는 곳…
Window 클래스도 다시 만들었고, 여러가지 힘들다.
샘플
Reference
이 문제에 관하여(tmlib-rpg 맵의 이동 제한이라든지 타이틀 장면이라든지 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YFukuyama/items/2a17e1f4d95a65198f5f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)