Failed attempt to build collision detection

This commit is contained in:
Indrajith K L
2021-08-03 23:06:26 +05:30
parent 705886d371
commit c3c5832587
7 changed files with 116 additions and 30 deletions

View File

@@ -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",

View File

@@ -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>

View File

@@ -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) {

View File

@@ -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
} }
} }

View File

@@ -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" }
} }

View File

@@ -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) {

View File

@@ -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)
} }
} }