JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/5.0.3/pixi.min.js"></script>
<canvas id='game_canvas'>
</canvas>
CSS
body {
margin: 0px;
}
JavaScript
const canvas = document.getElementById('game_canvas')
const app = window.app = new PIXI.Application({
view: canvas,
forceCanvas: false,
antialias: true,
width: window.innerWidth,
height: window.innerHeight
})
const TILE_SIZE = 32
const CHUNK_SIZE = 4
function createTileTexture(color) {
let graphics = new PIXI.Graphics()
graphics.beginFill(color)
graphics.drawRect(0, 0, TILE_SIZE, TILE_SIZE)
graphics.endFill()
return app.renderer.generateTexture(graphics)
}
function createBorderTexture(color) {
let graphics = new PIXI.Graphics()
graphics.lineStyle(1, 0xff0000)
graphics.drawRect(0, 0, CHUNK_SIZE * TILE_SIZE, CHUNK_SIZE * TILE_SIZE)
return app.renderer.generateTexture(graphics)
}
function createTile(texture, row, col) {
let sprite = new PIXI.Sprite(texture)
sprite.position.set(col * TILE_SIZE, row * TILE_SIZE)
return sprite
}
function createChunk() {
const chunk = {}
chunk.sprite = new PIXI.Container()
return chunk
}
function createFullChunk() {
let redTileTexture = createTileTexture(0x0000ff)
return createPopulatedChunk(redTileTexture, (row, col) => {
return true
})
}
function createPartialChunk() {
let greenTileTexture = createTileTexture(0x00ff00)
return createPopulatedChunk(greenTileTexture, (row, col) => {
return Math.random() < 0.1
})
}
function createPopulatedChunk(texture, condition) {
const chunk = createChunk()
for (let row = 0; row < CHUNK_SIZE; row++) {
for (let col = 0; col < CHUNK_SIZE; col++) {
if (condition(row, col)) {
let tile = createTile(texture, row, col)
chunk.sprite.addChild(tile)
}
}
}
chunk.sprite.cacheAsBitmap = true
return chunk
}
let world = new PIXI.Container()
let numChunksInRow = 3
let borderTexture = createBorderTexture()
let chunks = []
for (let row = 0; row < numChunksInRow; row++) {
for (let col = 0; col < numChunksInRow; col++) {
let chunkGridSprite = new PIXI.Sprite(borderTexture)
let partialChunk =...