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