User prompt
in bubble update, if not attached, if a bubble intersects with a barrier and the bubble is moving towards the barrier. Bounce the bubble off the barrier. Consider the barriers 4 lines each that is intersected with individually. With the circles new speedX and speedY being calculated based on circle to line intersections using real physics.
User prompt
n ball update, update the intersection logic such that it's between the ball circle and the barrier rectangle. With all the faces of the rectangle being factored in. Please factor in that both barrier and balls have an anchor point of .5, .5
Code edit (3 edits merged)
Please save this source code
User prompt
In ball update, update the intersection logic such that it's between the ball circle and the barrier rectangle. With all the faces of the rectangle being factored in.
User prompt
the modification of speedX and speedY should be based on rectangle to circle intersection and the out angle after intersection should be calculated accordingly
User prompt
in bible update, update the intersection logic to assume the barriers is a rectangle and the balls is a circle
Code edit (15 edits merged)
Please save this source code
User prompt
in bubble update, if not attached, if a bubble intersects with a barrier and the bubble is moving towards the barrier. Bounce the bubble off the barrier
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (4 edits merged)
Please save this source code
User prompt
rewrite getDetachedBubbles such that it counts from the last element in rows not the first
Code edit (1 edits merged)
Please save this source code
Code edit (5 edits merged)
Please save this source code
User prompt
in getDetachedBubbles you are using getConnectedBubbles however that is type dependent, for this case any type should count as connected.
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'if (bubble !== null && !visited.has(bubble)) {' Line Number: 105
User prompt
In var visited = new Set(connectedToTop.filter(function (bubble) { return bubble != null; })); LK does not support Set, please fix this
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'return bubble !== null;' Line Number: 99
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'return bubble !== undefined;' Line Number: 99
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'var visited = new Set(connectedToTop);' Line Number: 98
Code edit (1 edits merged)
Please save this source code
User prompt
Implement this //Get a list of bubbles that are not connected to the top row, or to a chain of bubbles connected to the top row. self.getDetachedBubbles = function () {}; Note that all unconnected bubbles must be detected
User prompt
getDetachedBubbles does not seem to detect all unconnected bubbles, please fix this
/**** * Classes ****/ var Barrier = Container.expand(function () { var self = Container.call(this); var barrierGraphics = self.attachAsset('barrier', { anchorX: .5, anchorY: 0 }); }); var Bubble = Container.expand(function (max_types) { var self = Container.call(this); var colors = [0xff0000, 0x00ff00, 0x0000ff, 0xff00ff, 0xffff00, 0x00ffff, 0xffffff]; var bubbleGraphics = self.attachAsset('bubble', { anchorX: 0.5, anchorY: 0.5 }); var state = 0; var targetX = 0; var targetY = 0; var isAttached = true; var speedX = 0; var speedY = 0; self.setPos = function (x, y) { self.x = targetX = x; self.y = targetY = y; }; max_types = max_types || 3; self.type = Math.floor(Math.random() * max_types); bubbleGraphics.tint = colors[self.type]; self.detatch = function () { game.addChild(self); self.y += grid.y; isAttached = false; speedX = Math.random() * 40 - 20; speedY = -Math.random() * 30; self.down = undefined; }; self.update = function () { if (!isAttached) { self.x += speedX; self.y += speedY; speedY += 1.5; if (self.x < self.width / 2 && speedX < 0 || self.x > game.width - self.width / 2 && speedX > 0) { speedX = -speedX; } // Check if the bubble intersects with a barrier and is moving towards the barrier for (var i = 0; i < barriers.length; i++) { var barrier = barriers[i]; if (self.intersects(barrier)) { if (self.x < barrier.x && speedX > 0 || self.x > barrier.x && speedX < 0) { speedX = -speedX; } if (self.y < barrier.y && speedY > 0 || self.y > barrier.y && speedY < 0) { speedY = -speedY; } } } } }; }); var Grid = Container.expand(function () { var self = Container.call(this); var rows = []; self.container = self.addChild(new Container()); var rowCount = 0; function insertRow() { var row = []; var rowWidth = rowCount % 2 == 0 ? 13 : 12; for (var a = 0; a < rowWidth; a++) { var bubble = new Bubble(); bubble.setPos((2048 - bubble.width * rowWidth) / 2 + bubble.width * a + bubble.width / 2, -rowCount * (1.7320508076 * bubble.height) / 2); self.container.addChild(bubble); row.push(bubble); bubble.down = function () { var bubbles = self.getConnectedBubbles(this); self.removeBubbles(bubbles); var disconnected = self.getDetachedBubbles(); self.removeBubbles(disconnected); }; } rows.push(row); rowCount++; } //Method that removes an array of bubbles from the rows array. self.removeBubbles = function (bubbles) { for (var i = 0; i < bubbles.length; i++) { var bubble = bubbles[i]; var bubbleIndex = this.findBubbleIndex(bubble); if (bubbleIndex) { rows[bubbleIndex.row][bubbleIndex.col] = null; bubble.detatch(); } } }; self.getConnectedBubbles = function (bubble, ignoreType) { var connectedBubbles = []; var queue = [bubble]; var visited = []; while (queue.length > 0) { var currentBubble = queue.shift(); if (visited.indexOf(currentBubble) === -1) { visited.push(currentBubble); connectedBubbles.push(currentBubble); var neighbors = self.getNeighbors(currentBubble); for (var i = 0; i < neighbors.length; i++) { var neighbor = neighbors[i]; if (neighbor && (neighbor.type === bubble.type || ignoreType)) { queue.push(neighbor); } } } } return connectedBubbles; }; //Get a list of bubbles that are not connected to the top row, or to a chain of bubbles connected to the top row. self.getDetachedBubbles = function () { var detachedBubbles = []; var connectedToTop = []; // Mark all bubbles connected to the bottom row var lastRowIndex = rows.length - 1; for (var i = 0; i < rows[lastRowIndex].length; i++) { if (rows[lastRowIndex][i] !== null) { var bottomConnected = self.getConnectedBubbles(rows[lastRowIndex][i], true); connectedToTop = connectedToTop.concat(bottomConnected); } } // Mark all bubbles as visited or not var visited = connectedToTop.filter(function (bubble) { return bubble != null; }); // Find all bubbles that are not visited and not connected to the top for (var row = 0; row < rows.length - 1; row++) { for (var col = 0; col < rows[row].length; col++) { var bubble = rows[row][col]; if (bubble !== null && visited.indexOf(bubble) == -1) { detachedBubbles.push(bubble); } } } return detachedBubbles; }; self.getNeighbors = function (bubble) { var neighbors = []; var bubbleIndex = this.findBubbleIndex(bubble); var directions = [[-1, 0], [1, 0], // left and right [0, -1], [0, 1], // above and below [-1, -1], [1, -1] // diagonals for even rows ]; if (bubbleIndex.row % 2 === 1) { // Adjust diagonals for odd rows directions[4] = [-1, 1]; directions[5] = [1, 1]; } for (var i = 0; i < directions.length; i++) { var dir = directions[i]; var newRow = bubbleIndex.row + dir[0]; var newCol = bubbleIndex.col + dir[1]; if (newRow >= 0 && newRow < rows.length && newCol >= 0 && newCol < rows[newRow].length) { neighbors.push(rows[newRow][newCol]); } } return neighbors; }; self.findBubbleIndex = function (bubble) { for (var row = 0; row < rows.length; row++) { var col = rows[row].indexOf(bubble); if (col !== -1) { return { row: row, col: col }; } } return null; }; insertRow(); insertRow(); insertRow(); insertRow(); insertRow(); insertRow(); insertRow(); insertRow(); insertRow(); }); var HintBubble = Container.expand(function () { var self = Container.call(this); }); var Launcher = Container.expand(function () { var self = Container.call(this); }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x010c42 }); /**** * Game Code ****/ //Game size 2048x2732 var grid = game.addChild(new Grid()); grid.y = 1300; var barriers = []; for (var a = 0; a < 4; a++) { var barrier = game.addChild(new Barrier()); barrier.y = 2732 - 500; barrier.x = 2048 / 5 * a + 2048 / 5; }
===================================================================
--- original.js
+++ change.js
@@ -3,10 +3,10 @@
****/
var Barrier = Container.expand(function () {
var self = Container.call(this);
var barrierGraphics = self.attachAsset('barrier', {
- anchorX: 0.5,
- anchorY: 0.5
+ anchorX: .5,
+ anchorY: 0
});
});
var Bubble = Container.expand(function (max_types) {
var self = Container.call(this);
@@ -43,8 +43,20 @@
speedY += 1.5;
if (self.x < self.width / 2 && speedX < 0 || self.x > game.width - self.width / 2 && speedX > 0) {
speedX = -speedX;
}
+ // Check if the bubble intersects with a barrier and is moving towards the barrier
+ for (var i = 0; i < barriers.length; i++) {
+ var barrier = barriers[i];
+ if (self.intersects(barrier)) {
+ if (self.x < barrier.x && speedX > 0 || self.x > barrier.x && speedX < 0) {
+ speedX = -speedX;
+ }
+ if (self.y < barrier.y && speedY > 0 || self.y > barrier.y && speedY < 0) {
+ speedY = -speedY;
+ }
+ }
+ }
}
};
});
var Grid = Container.expand(function () {
@@ -196,6 +208,7 @@
grid.y = 1300;
var barriers = [];
for (var a = 0; a < 4; a++) {
var barrier = game.addChild(new Barrier());
- barrier.y = 2732 - 400;
+ barrier.y = 2732 - 500;
+ barrier.x = 2048 / 5 * a + 2048 / 5;
}
\ No newline at end of file
Circular white gradient circle on black background. Gradient from white on the center to black on the outer edge all around.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Soft straight Long red paint on black background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
green notification bubble. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.