javascript - 本来应该带走2的为什么还要拼接很多元素
问题描述
目标是每当您的玩家进入青色圆圈时,它会变大并且圆圈会消失,但是现在当您获得圆圈时,很多圆圈都会消失(因为我认为正在拼接太多数据)。拉动的整个事情是不同的,因为我在解决这个问题后添加了一个不同的功能。现在,在检查你是否吃了一个圆圈的函数中,它返回你吃的圆圈的 Y+1(为了避免以某种方式返回 0)位置的索引值。然后我得到这个值并从所有圆的 x 和 y 的数组中拼接它。包含所有圆坐标的大数组是一个一维数组,以使我更容易。
- 这是基于在线游戏 agar.io。
var playerX;
var playerY;
var playerSize = 10;
var playerSpeed = (playerSize / Math.pow(playerSize, 1.44)) * 20;
var Newcelltimer = 0;
var cell = []
var cellEaten = 0;
var eaten = false;
//var pull = 1;
function setup() {
frameRate(50)
createCanvas(600, 450);
playerX = random(30, width - 30);
playerY = random(30, height - 30);
}
function draw() {
playerSpeed = (playerSize / Math.pow(playerSize, 1.44)) * 10
Newcelltimer++;
background(220);
if (keyIsDown(UP_ARROW) && playerY - playerSize / 2 >= 0) {
playerY -= playerSpeed;
}
if (keyIsDown(RIGHT_ARROW) && playerX + playerSize / 2 <= width) {
playerX += playerSpeed;
}
if (keyIsDown(DOWN_ARROW) && playerY + playerSize / 2 <= height) {
playerY += playerSpeed;
}
if (keyIsDown(LEFT_ARROW) && playerX - playerSize / 2 >= 0) {
playerX -= playerSpeed;
}
if (Newcelltimer % 100 === 0) {
cell.push(random(10, width - 10), random(10, height - 10))
}
for (var i = 0; i < cell.length / 2; i++) {
fill(0, 255, 255, 100)
circle(cell[i * 2], cell[i * 2 - 1], 7)
}
fill(255, 255, 0)
circle(playerX, playerY, playerSize)
fill(0)
ellipse(playerX - playerSize / 5, playerY - playerSize / 10, playerSize / 5, playerSize / 3)
ellipse(playerX + playerSize / 5, playerY - playerSize / 10, playerSize / 5, playerSize / 3)
arc(playerX, playerY + playerSize / 5, playerSize / 2, playerSize / 5, 0, 3.2, PIE)
fill(255, 255, 0)
noStroke()
arc(playerX, (playerY + playerSize / 5) - 1, playerSize / 2, playerSize / 5, 0, 3.2, PIE)
stroke(0)
var Xindices = [...cell.keys()].filter(i => cell[i] >= playerX /*-pull*/ - playerSize / 2 && cell[i] <= playerX /*pull*/ + playerSize / 2);
var Yindices = [...cell.keys()].filter(i => cell[i] >= playerY /**-pull*/ - (playerSize / 2) && cell[i] <= playerY /*+pull*/ + (playerSize / 2));
function eatCheck(arr1, arr2) {
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
if (Math.abs(Xindices[i] - Yindices[j]) === 1) {
return j+1;
}
}
}
return false;
}
for (var j = 0; j < Yindices.length; j++) {
if (Yindices[j] % 2 === 0 | Yindices[j] == 0) {
Yindices.splice(j, 1)
}
}
for (var j = 0; j < Xindices.length; j++) {
if (Xindices[j] % 2 === 1) {
Xindices.splice(j, 1)
}
}
if (eatCheck(Xindices,Yindices)!=false)
{
playerSize += 7;
cell.splice(Xindices[j-2])
cell.splice(Yindices[j-1])
cellEaten++;}
if (playerSize >= width | playerSize >= height) {
if (width > height) {
playerSize = height;
} else {
playerSize = width;
}
}
if (Newcelltimer % 500 === 0) {
cell.splice(0, 2)
}
// if(pull>=75)
// {
// pull = 75;
// }
fill(0)
text("Your Size is: " + playerSize, 30, 30)
// text("Your pull is: "+pull,30,60)
// text("Upgrade your pull for "+pull*5+" size",430,45)
// fill(0,0,0,0)
// rect(410,20,187,50)
// if(mouseClicked&&mouseX>410&&mouseX<600&&mouseY>20&&mouseY<50&&playerSize-10>pull*5)
// {
// playerSize-=pull*5
// pull++;
// }
}
解决方案
当玩家的圆圈移过其中一个时,导致所有青色圆圈被移除的草图的具体问题如下:
if (eatCheck(Xindices,Yindices)!=false)
{
playerSize += 7;
cell.splice(Xindices[j-2])
cell.splice(Yindices[j-1])
cellEaten++;
}
调用splice
需要指定要删除的数量。此代码更改将导致正在被吃掉的一个圆圈被删除:
if (eatCheck(Xindices,Yindices)!=false)
{
playerSize += 7;
cell.splice(Xindices[j-2],1); // remove 1 item from the list
cell.splice(Yindices[j-1],1); // remove 1 item from the list
cellEaten++;
}
这是拼接的一些信息
如果 deleteCount 被省略,或者它的值等于或大于 array.length - start (即如果等于或大于数组中剩余的元素个数,则从 start 开始),则所有元素从开始到结束的数组将被删除。
推荐阅读
- bash - 为什么使用 += 在 bash 中存储命令的退出状态?
- java - 如何使用 Mockito 通过注解注入模拟集合
- active-directory - 将 Microsoft Bot v4 与 ServiceNow 集成
- ietf-netmod-yang - 不可读 - YANG
- pdftron - PDFTRON 中的“此文档没有页面”错误
- python - 使用子进程打开一个exe文件并与之交互
- java - 如何将括号括在百分比周围?
- python - 如何在 Bert 序列分类中使用大于零的批量大小
- javascript - 刷新页面后如何保持复选框状态
- javascript - Firebase admin SDK FCM 错误 需要主题、令牌或条件之一