Collision

This commit is contained in:
2025-10-01 18:25:31 +10:00
parent fc9a447257
commit dcbdd23b24
5 changed files with 71 additions and 8 deletions

50
app.py
View File

@@ -4,13 +4,32 @@ from tokenize import String
from flask import Flask, request, jsonify
from flask_cors import CORS
player1 = {"name": "Player 1", "xpos": 1, "ypos": 1}
player1 = {"name": "Player 1", "xpos": 1, "ypos": 1, "xvel": 0, "yvel": 0}
map1 = {
"platforms": [
{"x": 30, "y": 100, "width": 100, "height": 100},
{"x": 0, "y": 260, "width": 400, "height": 10}
]
}
data = {}
def checkCollision():
global data
collision = False
for i in map1['platforms']:
if ((player1['ypos']+data['spriteData']['ufo']['height']/2 >= i['y']) & (player1['ypos']-data['spriteData']['ufo']['height']/2 <= i['y']+i['height']) & (player1['xpos']+data['spriteData']['ufo']['height']/2 >= i['x']) & (player1['xpos']-data['spriteData']['ufo']['width']/2 <= i['x']+i['width'])):
collision = True
return(collision)
app = Flask(__name__)
CORS(app)
@app.route('/api/send', methods=['POST'])
def receive_data():
global data
data = request.get_json()
# Input data is the form [reset(bool), isPressed(json)]
@@ -18,18 +37,43 @@ def receive_data():
if (data['reset']):
player1['xpos'] = 0
player1['ypos'] = 0
player1['xvel'] = 0
player1['yvel'] = 0
# Handle key presses
if (data['keyDown']['ArrowUp'] == True):
player1['ypos'] += 1
if (checkCollision()):
player1['ypos'] -= 1
player1['yvel'] = 2
else:
player1['ypos'] -= 1
if (data['keyDown']['ArrowDown'] == True):
player1['ypos'] += 1
print('LOW LOW LOW LOW LOW LOW LOW LOW')
if (data['keyDown']['ArrowRight'] == True):
player1['xpos'] += 1
if (checkCollision()):
player1['xpos'] -= 1;
if (data['keyDown']['ArrowLeft'] == True):
player1['xpos'] -= 1
if (checkCollision()):
player1['xpos'] += 1;
return jsonify(player1)
# Velocity
player1['xpos'] += player1['xvel']
player1['ypos'] -= player1['yvel']
if (checkCollision()):
player1['ypos'] += player1['yvel']
player1['yvel'] = 0
# Handle Gravity
player1['yvel'] -= 0.05
return jsonify({
"player1": player1,
"map1": map1,
})
if __name__ == '__main__':
app.run(debug=True)

View File

@@ -1,3 +1,4 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="index.css">
@@ -8,5 +9,6 @@
<canvas id="canvas" width="480" height="270"></canvas>
</body>
<script src="sprites.js"></script>
<script src="index.js"></script>
</html>

View File

@@ -9,11 +9,18 @@ function sendData(data) {
})
.then(res => res.json())
.then(data => {
// Clear Canvas
ctx.clearRect(0, 0, 480, 270);
ctx.beginPath();
ctx.arc(data.xpos, data.ypos, 10, 0, Math.PI * 2);
ctx.fill();
// Draw in Player 1
ctx.drawImage(ufo, data.player1.xpos-spriteData.ufo.width/2, data.player1.ypos-spriteData.ufo.height/2)
reset = false
// Draw Hitboxes (For debugging)
let plat = data.map1.platforms
for (i = 0; i < plat.length; i++) {
ctx.fillRect(plat[i].x, plat[i].y, plat[i].width, plat[i].height)
}
})
.catch(err => console.error('Error:', err));
}
@@ -58,4 +65,4 @@ document.addEventListener('keyup', function (e) {
// Start Game
var reset = true
setInterval(() => sendData({reset, keyDown}), 16);
setInterval(() => sendData({reset, keyDown, spriteData}), 16);

10
sprites.js Normal file
View File

@@ -0,0 +1,10 @@
const ufo = new Image();
ufo.src = "sprites/ufo.png";
const spriteData = {
"ufo": {}
};
ufo.onload = function () {
spriteData.ufo.width = this.width;
spriteData.ufo.height = this.height;
}

BIN
sprites/ufo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B