In this repository you can find examples of RPGJS capabilities.
Here you can find assets used in video. Credits
Here is code example used in this video.
rpg.toml
spritesheetDirectories= [
'lpc-sprites'
]
main/lpc-sprites/LPCSpritesheet.ts
import { Animation, Spritesheet } from '@rpgjs/client'
import { Direction } from '@rpgjs/common'
const LPCSpritesheetPreset = () => {
const frameY = (direction: Direction) => {
return {
[Direction.Down]: 2,
[Direction.Left]: 1,
[Direction.Right]: 3,
[Direction.Up]: 0
}[direction]
}
const stand = (direction: Direction) => [{ time: 0, frameX: 1, frameY: frameY(direction) }]
const anim = (direction: Direction, framesWidth: number, speed: number = 5) => {
const array: any = []
for (let i = 0; i < framesWidth; i++) {
array.push({ time: i * speed, frameX: i, frameY: frameY(direction) })
}
return array
}
return {
rectWidth: 64,
rectHeight: 64,
spriteRealSize: {
width: 48,
height: 52,
},
framesWidth: 6,
framesHeight: 4,
textures: {
[Animation.Stand]: {
offset: {
x: 0,
y: 512,
},
animations: (direction: Direction) => [stand(direction)]
},
[Animation.Walk]: {
offset: {
x: 0,
y: 512,
},
framesWidth: 9,
framesHeight: 4,
animations: (direction: Direction) => [anim(direction, 9)]
},
[Animation.Attack]: {
offset: {
x: 0,
y: 768,
},
framesWidth: 6,
framesHeight: 4,
animations: (direction: Direction) => [anim(direction, 6, 3)]
},
[Animation.Skill]: {
framesWidth: 7,
framesHeight: 4,
animations: (direction: Direction) => [anim(direction, 7, 3)]
}
},
}
}
@Spritesheet({
...LPCSpritesheetPreset(),
})
export default class LPCSpritesheet {
}
Then put images to the lpc-sprites
directory and use them as graphics for player.
main/player.ts
/* ... */
player.setGraphic(['pale-green-body', 'pale-green-head', 'pale-green-wings', 'pale-green-wings-fg', 'dark-grey-coat', 'boots-black', 'hood-black']);
/* ... */