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

View File

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

View File

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

View File

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

View File

@@ -8,4 +8,5 @@ class ObjectType {
static PLAYER { "player" }
static NPC { "npc" }
static ENEMY { "enemy" }
static COLLIDER { "collider" }
}

View File

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

View File

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