Ajout de plateformes semi-solides

This commit is contained in:
theo@manjaro 2021-07-06 21:14:27 +02:00
parent 1a435b80fb
commit 2019416980
4 changed files with 97 additions and 89 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -74,8 +74,8 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[12, 6], [-1],
[13, 6], [-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -113,8 +113,8 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[12, 7], [-1],
[13, 7], [-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -147,18 +147,18 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[0, 0], [-1],
[1, 0], [-1],
[1, 0], [-1],
[1, 0], [-1],
[1, 0], [-1],
[1, 0], [-1],
[1, 0], [-1],
[1, 0], [-1],
[1, 0], [-1],
[1, 0], [-1],
[1, 0], [-1],
[2, 0], [-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -186,18 +186,18 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[5, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[3, 1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -223,22 +223,22 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[0, 0], [-1],
[1, 0], [-1],
[5, 2], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [0, 4],
[1, 1], [1, 4],
[1, 1], [1, 4],
[1, 1], [2, 4],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[3, 2], [-1],
[1, 0], [-1],
[2, 0], [-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -262,22 +262,22 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[0, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[3, 0], [-1],
[1, 2], [-1],
[1, 2], [-1],
[1, 2], [-1],
[1, 2], [-1],
[1, 2], [-1],
[1, 2], [-1],
[5, 0], [-1],
[1, 1], [-1],
[1, 1], [-1],
[1, 1], [-1],
[2, 1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -301,22 +301,22 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[0, 2],
[1, 2],
[1, 2],
[1, 2],
[2, 2],
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
[0, 2], [-1],
[1, 2], [-1],
[1, 2], [-1],
[1, 2], [-1],
[2, 2], [-1],
[-1],
[-1],
[-1],
[-1],
[-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -342,18 +342,18 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [0, 4],
[-1], [1, 4],
[-1], [1, 4],
[-1], [1, 4],
[-1], [1, 4],
[-1], [1, 4],
[-1], [1, 4],
[-1], [1, 4],
[-1], [1, 4],
[-1], [1, 4],
[-1], [1, 4],
[-1], [2, 4],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -693,9 +693,6 @@
"gridCellsX": 37, "gridCellsX": 37,
"gridCellsY": 17, "gridCellsY": 17,
"entities": [ "entities": [
{"name": "Solid", "id": 12, "_eid": "17026310", "x": 208, "y": 48, "width": 192, "height": 64, "originX": 0, "originY": 0},
{"name": "Solid", "id": 13, "_eid": "17026310", "x": 176, "y": 80, "width": 80, "height": 48, "originX": 0, "originY": 0},
{"name": "Solid", "id": 14, "_eid": "17026310", "x": 352, "y": 80, "width": 80, "height": 48, "originX": 0, "originY": 0},
{"name": "Solid", "id": 15, "_eid": "17026310", "x": 480, "y": 144, "width": 112, "height": 64, "originX": 0, "originY": 0}, {"name": "Solid", "id": 15, "_eid": "17026310", "x": 480, "y": 144, "width": 112, "height": 64, "originX": 0, "originY": 0},
{"name": "Solid", "id": 16, "_eid": "17026310", "x": 384, "y": 192, "width": 64, "height": 64, "originX": 0, "originY": 0}, {"name": "Solid", "id": 16, "_eid": "17026310", "x": 384, "y": 192, "width": 64, "height": 64, "originX": 0, "originY": 0},
{"name": "Solid", "id": 17, "_eid": "17026310", "x": 448, "y": 192, "width": 64, "height": 48, "originX": 0, "originY": 0}, {"name": "Solid", "id": 17, "_eid": "17026310", "x": 448, "y": 192, "width": 64, "height": 48, "originX": 0, "originY": 0},
@ -703,7 +700,9 @@
{"name": "Solid", "id": 19, "_eid": "17026310", "x": 0, "y": 144, "width": 112, "height": 64, "originX": 0, "originY": 0}, {"name": "Solid", "id": 19, "_eid": "17026310", "x": 0, "y": 144, "width": 112, "height": 64, "originX": 0, "originY": 0},
{"name": "Solid", "id": 20, "_eid": "17026310", "x": 144, "y": 192, "width": 80, "height": 64, "originX": 0, "originY": 0}, {"name": "Solid", "id": 20, "_eid": "17026310", "x": 144, "y": 192, "width": 80, "height": 64, "originX": 0, "originY": 0},
{"name": "Solid", "id": 21, "_eid": "17026310", "x": 80, "y": 192, "width": 64, "height": 48, "originX": 0, "originY": 0}, {"name": "Solid", "id": 21, "_eid": "17026310", "x": 80, "y": 192, "width": 64, "height": 48, "originX": 0, "originY": 0},
{"name": "Solid", "id": 22, "_eid": "17026310", "x": 32, "y": 208, "width": 48, "height": 16, "originX": 0, "originY": 0} {"name": "Solid", "id": 22, "_eid": "17026310", "x": 32, "y": 208, "width": 48, "height": 16, "originX": 0, "originY": 0},
{"name": "SemiSolid", "id": 23, "_eid": "59763689", "x": 208, "y": 128, "width": 192, "height": 16, "originX": 0, "originY": 0},
{"name": "SemiSolid", "id": 24, "_eid": "59763689", "x": 272, "y": 80, "width": 64, "height": 16, "originX": 0, "originY": 0}
] ]
}, },
{ {

View File

@ -14,6 +14,7 @@ class Player(BaseObject):
super().__init__(x,y,game,self.sprite.get_width(),self.sprite.get_height()) super().__init__(x,y,game,self.sprite.get_width(),self.sprite.get_height())
self.collisionrects = tileset.rects self.collisionrects = tileset.rects
self.semirects = tileset.semirects
self.tilew = tileset.solidtilew self.tilew = tileset.solidtilew
self.tileh = tileset.solidtileh self.tileh = tileset.solidtileh
@ -37,7 +38,7 @@ class Player(BaseObject):
self.onground = False self.onground = False
if self.checkcollisions(0,1): if self.checkcollisions(0,1):
self.onground = True self.onground = True
self.vertical=0 self.vertical=min(0,self.vertical)
else: else:
self.vertical+=self.gravity*self.game.dt self.vertical+=self.gravity*self.game.dt
self.vertical = min(self.maxgravity,self.vertical) self.vertical = min(self.maxgravity,self.vertical)
@ -114,6 +115,12 @@ class Player(BaseObject):
if temprect.colliderect(rect): if temprect.colliderect(rect):
result = rect result = rect
break break
if not result:
for rect in self.semirects:
if self.rect.bottom<=rect.top:
if temprect.colliderect(rect):
result = rect
break
return result return result
def draw(self): def draw(self):

View File

@ -25,6 +25,7 @@ class TilesetRenderer(BaseObject):
json = level["data"] json = level["data"]
name = level["name"] name = level["name"]
self.rects = [] self.rects = []
self.semirects = []
self.layers = [] self.layers = []
self.spawns = [[self.game.DISPLAY_WIDTH//2,self.game.DISPLAY_HEIGHT//2]] # Valeur par défaut self.spawns = [[self.game.DISPLAY_WIDTH//2,self.game.DISPLAY_HEIGHT//2]] # Valeur par défaut
if "layers" in json.keys() and type(json["layers"]).__name__=="list": if "layers" in json.keys() and type(json["layers"]).__name__=="list":
@ -79,9 +80,10 @@ class TilesetRenderer(BaseObject):
w = entity["width"] w = entity["width"]
if "height" in entity.keys(): if "height" in entity.keys():
h = entity["height"] h = entity["height"]
self.rects.append(self.game.pygame.Rect(x,y,w,h)) lists = {"Solid":self.rects,"SemiSolid":self.semirects}
lists[entity["name"]].append(self.game.pygame.Rect(x,y,w,h))
except: except:
self.game.log("Erreur",name,"Propriétés invalides") self.game.log("Erreur",name,entity,"Propriétés invalides")
else: else:
self.game.log("Erreur",name,"Il manque les collisions, Entity Layer nommé Solids") self.game.log("Erreur",name,"Il manque les collisions, Entity Layer nommé Solids")