Failed attempt to build collision detection
This commit is contained in:
@@ -47,8 +47,30 @@
|
|||||||
"type":"player",
|
"type":"player",
|
||||||
"visible":true,
|
"visible":true,
|
||||||
"width":16,
|
"width":16,
|
||||||
"x":16,
|
"x":0,
|
||||||
"y":32
|
"y":0
|
||||||
|
}],
|
||||||
|
"opacity":1,
|
||||||
|
"type":"objectgroup",
|
||||||
|
"visible":true,
|
||||||
|
"x":0,
|
||||||
|
"y":0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"draworder":"topdown",
|
||||||
|
"id":6,
|
||||||
|
"name":"colliders",
|
||||||
|
"objects":[
|
||||||
|
{
|
||||||
|
"height":60.5,
|
||||||
|
"id":7,
|
||||||
|
"name":"",
|
||||||
|
"rotation":0,
|
||||||
|
"type":"collider",
|
||||||
|
"visible":true,
|
||||||
|
"width":47.75,
|
||||||
|
"x":95.75,
|
||||||
|
"y":55.5
|
||||||
}],
|
}],
|
||||||
"opacity":1,
|
"opacity":1,
|
||||||
"type":"objectgroup",
|
"type":"objectgroup",
|
||||||
@@ -56,8 +78,8 @@
|
|||||||
"x":0,
|
"x":0,
|
||||||
"y":0
|
"y":0
|
||||||
}],
|
}],
|
||||||
"nextlayerid":6,
|
"nextlayerid":7,
|
||||||
"nextobjectid":2,
|
"nextobjectid":8,
|
||||||
"orientation":"orthogonal",
|
"orientation":"orthogonal",
|
||||||
"renderorder":"right-down",
|
"renderorder":"right-down",
|
||||||
"tiledversion":"1.5.0",
|
"tiledversion":"1.5.0",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.5" tiledversion="1.5.0" orientation="orthogonal" renderorder="right-down" width="20" height="15" tilewidth="16" tileheight="16" infinite="0" nextlayerid="6" nextobjectid="2">
|
<map version="1.5" tiledversion="1.5.0" orientation="orthogonal" renderorder="right-down" width="20" height="15" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="8">
|
||||||
<editorsettings>
|
<editorsettings>
|
||||||
<export target="level1.json" format="json"/>
|
<export target="level1.json" format="json"/>
|
||||||
</editorsettings>
|
</editorsettings>
|
||||||
@@ -43,6 +43,9 @@
|
|||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<objectgroup id="5" name="objects">
|
<objectgroup id="5" name="objects">
|
||||||
<object id="1" name="player" type="player" x="16" y="32" width="16" height="16"/>
|
<object id="1" name="player" type="player" x="0" y="0" width="16" height="16"/>
|
||||||
|
</objectgroup>
|
||||||
|
<objectgroup id="6" name="colliders">
|
||||||
|
<object id="7" type="collider" x="95.75" y="55.5" width="47.75" height="60.5"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|||||||
@@ -2,26 +2,48 @@ import "graphics" for ImageData, Canvas
|
|||||||
import "./controls" for Controls
|
import "./controls" for Controls
|
||||||
import "./config" for Config
|
import "./config" for Config
|
||||||
class Player {
|
class Player {
|
||||||
construct new(x,y) {
|
construct new(x,y, gameState) {
|
||||||
|
__gameState = gameState
|
||||||
_x = x
|
_x = x
|
||||||
_y = y
|
_y = y
|
||||||
|
|
||||||
_playerSprite = ImageData.loadFromFile("assets/sprites/player.png")
|
_playerSprite = ImageData.loadFromFile("assets/sprites/player.png")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
x { _x }
|
||||||
|
y { _y }
|
||||||
|
w { 16 }
|
||||||
|
h { 16 }
|
||||||
|
|
||||||
update() {
|
update() {
|
||||||
if(Controls.isKeyDown(Config.KeyboardConstants["UP"])) {
|
|
||||||
|
var collided = __gameState.checkCollision(this)
|
||||||
|
|
||||||
|
if(Controls.isKeyDown(Config.KeyboardConstants["UP"]) && !collided) {
|
||||||
_y = _y - 1
|
_y = _y - 1
|
||||||
}
|
} else if(Controls.isKeyDown(Config.KeyboardConstants["UP"]) && collided){
|
||||||
if(Controls.isKeyDown(Config.KeyboardConstants["DOWN"])) {
|
|
||||||
_y = _y + 1
|
_y = _y + 1
|
||||||
}
|
}
|
||||||
if(Controls.isKeyDown(Config.KeyboardConstants["LEFT"])) {
|
|
||||||
_x = _x - 1
|
if(Controls.isKeyDown(Config.KeyboardConstants["DOWN"]) && !collided) {
|
||||||
|
_y = _y + 1
|
||||||
|
} else if(Controls.isKeyDown(Config.KeyboardConstants["DOWN"]) && collided){
|
||||||
|
_y = _y - 1
|
||||||
}
|
}
|
||||||
if(Controls.isKeyDown(Config.KeyboardConstants["RIGHT"])) {
|
|
||||||
|
if(Controls.isKeyDown(Config.KeyboardConstants["LEFT"]) && !collided) {
|
||||||
|
_x = _x - 1
|
||||||
|
} else if(Controls.isKeyDown(Config.KeyboardConstants["LEFT"]) && collided){
|
||||||
_x = _x + 1
|
_x = _x + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Controls.isKeyDown(Config.KeyboardConstants["RIGHT"]) && !collided) {
|
||||||
|
_x = _x + 1
|
||||||
|
} else if(Controls.isKeyDown(Config.KeyboardConstants["RIGHT"]) && collided){
|
||||||
|
_x = _x - 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
draw(dt) {
|
draw(dt) {
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ class GameState {
|
|||||||
AudioEngine.load("select","assets/sfx/select.wav")
|
AudioEngine.load("select","assets/sfx/select.wav")
|
||||||
AudioEngine.load("credit","assets/musics/Juhani Junkala [Retro Game Music Pack] Ending.wav")
|
AudioEngine.load("credit","assets/musics/Juhani Junkala [Retro Game Music Pack] Ending.wav")
|
||||||
_fullScreen = false
|
_fullScreen = false
|
||||||
|
_entities = []
|
||||||
|
_collidables = []
|
||||||
setupStates()
|
setupStates()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,15 +32,49 @@ class GameState {
|
|||||||
|
|
||||||
switch(level) {
|
switch(level) {
|
||||||
AudioEngine.stopAllChannels()
|
AudioEngine.stopAllChannels()
|
||||||
|
_entities.clear()
|
||||||
|
_collidables.clear()
|
||||||
_currentLevel = __gameStates[level].new(this)
|
_currentLevel = __gameStates[level].new(this)
|
||||||
System.print("Current Level : %(__gameStates[level].name)")
|
System.print("Current Level : %(__gameStates[level].name)")
|
||||||
}
|
}
|
||||||
|
|
||||||
update() {
|
update() {
|
||||||
_currentLevel.update()
|
_currentLevel.update()
|
||||||
|
for(entity in _entities) {
|
||||||
|
entity.update()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
draw(dt) {
|
draw(dt) {
|
||||||
_currentLevel.draw(dt)
|
_currentLevel.draw(dt)
|
||||||
|
for(entity in _entities) {
|
||||||
|
entity.draw(dt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addEntities(entity) {
|
||||||
|
_entities.add(entity)
|
||||||
|
}
|
||||||
|
|
||||||
|
addCollidable(collidable) {
|
||||||
|
_collidables.add(collidable)
|
||||||
|
}
|
||||||
|
|
||||||
|
checkCollision(entity) {
|
||||||
|
var collide = false
|
||||||
|
for(collidable in _collidables) {
|
||||||
|
System.print(entity.x)
|
||||||
|
var entityX = entity.x
|
||||||
|
var entityY = entity.y
|
||||||
|
if(entityX < (collidable["x"] + collidable["width"]) &&
|
||||||
|
(entityX + entity.w) > collidable["x"] &&
|
||||||
|
entityY < (collidable["y"] + collidable["height"]) &&
|
||||||
|
(entityY + entity.h) > collidable["y"]) {
|
||||||
|
collide = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return collide
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,4 +8,5 @@ class ObjectType {
|
|||||||
static PLAYER { "player" }
|
static PLAYER { "player" }
|
||||||
static NPC { "npc" }
|
static NPC { "npc" }
|
||||||
static ENEMY { "enemy" }
|
static ENEMY { "enemy" }
|
||||||
|
static COLLIDER { "collider" }
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,8 @@ import "math" for Math
|
|||||||
import "./layer_type" for LayerType, ObjectType
|
import "./layer_type" for LayerType, ObjectType
|
||||||
import "./entities/player_entity" for Player
|
import "./entities/player_entity" for Player
|
||||||
class LevelMap {
|
class LevelMap {
|
||||||
construct new(mapName) {
|
construct new(mapName, gameState) {
|
||||||
|
__gameState = gameState
|
||||||
_mapData = Json.load("assets/%(mapName).json")
|
_mapData = Json.load("assets/%(mapName).json")
|
||||||
var tileSheetData = _mapData["tilesets"][0] // Assuming there is only a single tilesheet/level
|
var tileSheetData = _mapData["tilesets"][0] // Assuming there is only a single tilesheet/level
|
||||||
_tileSheet = ImageData.loadFromFile("assets/%(tileSheetData["image"])")
|
_tileSheet = ImageData.loadFromFile("assets/%(tileSheetData["image"])")
|
||||||
@@ -21,8 +22,8 @@ class LevelMap {
|
|||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 0
|
"y": 0
|
||||||
}
|
}
|
||||||
|
_levelEntities = []
|
||||||
placeObjects()
|
placeObjects()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
playerPos = (position) {
|
playerPos = (position) {
|
||||||
@@ -40,22 +41,24 @@ class LevelMap {
|
|||||||
"x": object["x"],
|
"x": object["x"],
|
||||||
"y": object["y"]
|
"y": object["y"]
|
||||||
}
|
}
|
||||||
_player = Player.new(playerPos["x"], playerPos["y"])
|
_player = Player.new(playerPos["x"], playerPos["y"], __gameState)
|
||||||
|
__gameState.addEntities(_player)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(object["type"]==ObjectType.COLLIDER) {
|
||||||
|
__gameState.addCollidable({
|
||||||
|
"x": Math.floor(object["x"]),
|
||||||
|
"y": Math.floor(object["y"]),
|
||||||
|
"width": Math.floor(object["width"]),
|
||||||
|
"height": Math.floor(object["height"])
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
draw(dt) {
|
draw(x, y) {
|
||||||
_player.draw(dt)
|
|
||||||
}
|
|
||||||
|
|
||||||
update() {
|
|
||||||
_player.update()
|
|
||||||
}
|
|
||||||
|
|
||||||
render(x, y) {
|
|
||||||
var startX = x
|
var startX = x
|
||||||
var startY = y
|
var startY = y
|
||||||
for(layer in _layers) {
|
for(layer in _layers) {
|
||||||
|
|||||||
@@ -5,20 +5,20 @@ import "./config" for Config
|
|||||||
class Level1 {
|
class Level1 {
|
||||||
construct new(gameState) {
|
construct new(gameState) {
|
||||||
__gameState = gameState
|
__gameState = gameState
|
||||||
_level1 = LevelMap.new("level1")
|
_level1 = LevelMap.new("level1", __gameState)
|
||||||
var channel = AudioEngine.play("level1_bg")
|
var channel = AudioEngine.play("level1_bg")
|
||||||
channel.volume = 0.2
|
channel.volume = 0.2
|
||||||
}
|
}
|
||||||
|
|
||||||
update() {
|
update() {
|
||||||
|
|
||||||
if(Controls.justPressed(Config.KeyboardConstants["ATTACK"])) {
|
if(Controls.justPressed(Config.KeyboardConstants["ATTACK"])) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_level1.update()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
draw(dt) {
|
draw(dt) {
|
||||||
_level1.render(0,0)
|
_level1.draw(0,0)
|
||||||
_level1.draw(dt)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user