- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否有人能够帮助我完成我在 P5.JS 上创建的游戏?我试图在这个游戏中创造生命作为一个功能,但是每当我在峡谷中死去时,它会带走所有的生命,而不是仅仅带走一个生命并按照它应该的方式重置游戏。任何建议都会非常有帮助。
var gameChar_x;
var gameChar_y;
var floorPos_y;
var scrollPos;
var gameChar_world_x;
var isLeft;
var isRight;
var isFalling;
var isPlummeting;
var trees_x;
var clouds;
var mountains;
var collectables;
var canyon;
var game_score;
var flagpole;
var lives;
function setup()
{
createCanvas(1024, 576);
floorPos_y = height * 3/4;
lives = 3;
startGame();
}
function draw()
{
background(100, 155, 255); // fill the sky blue
noStroke();
fill(0,155,0);
rect(0, floorPos_y, width, height/4); // draw some green ground
push();
translate(scrollPos, 0);
drawClouds();
drawMountains();
drawTrees();
for(var i = 0; i < canyon.length; i++)
{
drawCanyon(canyon[i]);
checkCanyon(canyon[i]);
}
// Draw collectable items.
strokeWeight(1)
for(var i = 0; i < collectables.length; i++)
{
if(!collectables[i].isFound)
{
drawCollectable(collectables[i]);
checkCollectable(collectables[i]);
}
}
renderFlagpole();
checkPlayerDie();
pop();
// Draw game character.
drawGameChar();
fill(255, 0, 0);
textSize(24);
text("Lives: " + lives, width/8, 20);
fill(0);
noStroke();
textSize(24);
text("score: " + game_score, width/2, 20)
textSize(12);
// Logic to make the game character move or the background scroll.
if(isLeft)
{
if(gameChar_x > width * 0.2)
{
gameChar_x -= 5;
}
else
{
scrollPos += 5;
}
}
if(isRight)
{
if(gameChar_x < width * 0.8)
{
gameChar_x += 5;
}
else
{
scrollPos -= 5; // negative for moving against the background
}
}
// Logic to make the game character rise and fall.
if(gameChar_y !== floorPos_y)
{
gameChar_y += 2
isFalling = true;
}
else if(isFalling)
{
isFalling = false;
}
if(flagpole.isReached == false)
{
checkFlagpole();
}
// Update real position of gameChar for collision detection.
gameChar_world_x = gameChar_x - scrollPos;
}
// ---------------------
// Key control functions
// ---------------------
function keyPressed()
{
if(keyCode == 37)
{
console.log("left arrow");
isLeft = true;
}
else if(keyCode == 39)
{
console.log("right arrow");
isRight = true;
}
if(keyCode == 32 && gameChar_y == floorPos_y)
{
console.log("jump")
gameChar_y -=100;
}
}
function keyReleased()
{
if(keyCode == 37)
{
console.log("left arrow");
isLeft = false;
}
else if(keyCode == 39)
{
console.log("right arrow");
isRight = false;
}
}
// ------------------------------
// Game character render function
// ------------------------------
// Function to draw the game character.
function drawGameChar()
{
if(isLeft && isFalling)
{
// add your jumping-left code
fill(255, 201, 169); //head
ellipse(gameChar_x, gameChar_y - 55, 30, 40);
fill(0); //back leg
ellipse(gameChar_x + 10, gameChar_y - 20, 20, 10);
fill(255, 201, 169); //back arm
ellipse(gameChar_x + 12, gameChar_y - 35, 10, 10);
fill(135, 206, 235); //body
rect(gameChar_x-10, gameChar_y - 38, 20, 15);
fill(0) //front leg
ellipse(gameChar_x - 10, gameChar_y - 20, 20, 10);
fill(0) //eye
ellipse(gameChar_x - 11, gameChar_y - 58, 2, 10);
fill(255, 201, 169); //front arm
ellipse(gameChar_x + 8, gameChar_y - 30, 10, 10);
}
else if(isRight && isFalling)
{
// add your jumping-right code
fill(255, 201, 169); //head
ellipse(gameChar_x, gameChar_y - 55, 30, 40);
fill(0); //back leg
ellipse(gameChar_x - 10, gameChar_y - 20, 20, 10);
fill(255, 201, 169); //back arm
ellipse(gameChar_x - 12, gameChar_y - 35, 10, 10);
fill(135, 206, 235); //body
rect(gameChar_x - 10, gameChar_y - 38, 20, 15);
fill(0) //front leg
ellipse(gameChar_x + 10, gameChar_y - 20, 20, 10);
fill(0) //eye
ellipse(gameChar_x + 11, gameChar_y - 58, 2, 10);
fill(255, 201, 169); //front arm
ellipse(gameChar_x - 8, gameChar_y - 30, 10, 10);
}
else if(isLeft)
{
// add your walking left code
fill(255, 201, 169); //head
ellipse(gameChar_x, gameChar_y - 45, 30, 40);
fill(0); //back leg
ellipse(gameChar_x + 10, gameChar_y - 7, 20, 10);
fill(255, 201, 169); //back arm
ellipse(gameChar_x + 12, gameChar_y - 25, 10, 10);
fill(135, 206, 235); //body
rect(gameChar_x-10, gameChar_y - 28, 20, 20);
fill(0) //front leg
ellipse(gameChar_x - 10, gameChar_y - 4, 20, 10);
fill(0) //eye
ellipse(gameChar_x - 11, gameChar_y - 48, 2, 10);
fill(255, 201, 169); //front arm
ellipse(gameChar_x - 13, gameChar_y - 16, 10, 10);
}
else if(isRight)
{
// add your walking right code
fill(255, 201, 169); //head
ellipse(gameChar_x, gameChar_y - 45, 30, 40);
fill(0); //back leg
ellipse(gameChar_x - 10, gameChar_y - 7, 20, 10);
fill(255, 201, 169); //back arm
ellipse(gameChar_x - 12, gameChar_y - 25, 10, 10);
fill(135, 206, 235); //body
rect(gameChar_x - 10, gameChar_y - 28, 20, 20);
fill(0) //front leg
ellipse(gameChar_x + 10, gameChar_y - 4, 20, 10);
fill(0) //eye
ellipse(gameChar_x + 11, gameChar_y - 48, 2, 10);
fill(255, 201, 169); //front arm
ellipse(gameChar_x + 13, gameChar_y - 16, 10, 10);
}
else if(isFalling || isPlummeting)
{
// add your jumping facing forwards code
fill(255, 201, 169);//head
ellipse(gameChar_x, gameChar_y - 55, 40, 40);
fill(135, 206, 235); //body
rect(gameChar_x-13, gameChar_y - 38, 26, 20);
fill(255, 201, 169); //arms
ellipse(gameChar_x - 13, gameChar_y - 33, 10, 10);
ellipse(gameChar_x + 18, gameChar_y - 70, 10, 10);
fill(0) //legs
ellipse(gameChar_x - 10, gameChar_y - 10, 20, 10);
ellipse(gameChar_x + 10, gameChar_y - 17, 20, 10);
fill(0) //eyes
ellipse(gameChar_x - 8, gameChar_y - 58, 5, 10);
ellipse(gameChar_x + 8, gameChar_y - 58, 5, 10);
}
else
{
// add your standing front facing code
fill(255, 201, 169);
ellipse(gameChar_x, gameChar_y - 45, 40, 40);
fill(135, 206, 235);
rect(gameChar_x-13, gameChar_y - 28, 26, 20);
fill(255, 201, 169);
ellipse(gameChar_x - 13, gameChar_y - 18, 10, 10);
ellipse(gameChar_x + 13, gameChar_y - 18, 10, 10);
fill(0)
ellipse(gameChar_x - 10, gameChar_y - 5, 20, 10);
ellipse(gameChar_x + 10, gameChar_y - 5, 20, 10);
fill(0)
ellipse(gameChar_x - 8, gameChar_y - 48, 5, 10);
ellipse(gameChar_x + 8, gameChar_y - 48, 5, 10);
strokeWeight(0)
}
}
// ---------------------------
// Background render functions
// ---------------------------
// Function to draw cloud objects.
function drawClouds()
{
for (var i = 0; i < clouds.length; i++)
{
fill(255,255,255);
ellipse(clouds[i].pos_x,
clouds[i].pos_y, 70, 80);
ellipse(clouds[i].pos_x + 30,
clouds[i].pos_y, 80, 100);
ellipse(clouds[i].pos_x + 60,
clouds[i].pos_y, 80, 100);
ellipse(clouds[i].pos_x + 90,
clouds[i].pos_y, 70, 80);
}
}
// Function to draw mountains objects.
function drawMountains()
{
for (var i = 0; i < mountains.length; i++)
{
fill(120, 120, 120);
triangle(mountains[i].pos_x,
mountains[i].pos_y,
mountains[i].pos_x + 270,
mountains[i].pos_y - 326,
mountains[i].pos_x + 410,
mountains[i].pos_y);
fill(255, 255, 255);
triangle(mountains[i].pos_x + 310,
mountains[i].pos_y - 247,
mountains[i].pos_x + 267,
mountains[i].pos_y - 326,
mountains[i].pos_x + 270,
mountains[i].pos_y - 266);
triangle(mountains[i].pos_x + 280,
mountains[i].pos_y - 266,
mountains[i].pos_x + 267,
mountains[i].pos_y - 326,
mountains[i].pos_x + 210,
mountains[i].pos_y - 255);
triangle(mountains[i].pos_x + 225,
mountains[i].pos_y - 267,
mountains[i].pos_x + 260,
mountains[i].pos_y - 247,
mountains[i].pos_x + 300,
mountains[i].pos_y - 267);
}
}
// Function to draw trees objects.
function drawTrees()
{
for (var i = 0; i < trees_x.length; i++)
{
fill(122, 31, 31); //tree
rect(trees_x[i], treePos_y + 105, 35, 40);
fill(34,139,34);
triangle(trees_x[i] + 80,
treePos_y + 115,
trees_x[i] + 20,
treePos_y + 45,
trees_x[i] - 45,
treePos_y + 115);
triangle(trees_x[i] + 80,
treePos_y + 75,
trees_x[i] + 20,
treePos_y - 5,
trees_x[i] - 45,
treePos_y + 75);
}
}
// ---------------------------------
// Canyon render and check functions
// ---------------------------------
// Function to draw canyon objects.
function drawCanyon(t_canyon)
{
fill(100, 155, 255);
rect(t_canyon.pos_x, floorPos_y, t_canyon.width, 144);
}
// Function to check character is over a canyon.
function checkCanyon(t_canyon)
{
if(gameChar_world_x > t_canyon.pos_x && gameChar_world_x < t_canyon.pos_x + 100)
{
gameChar_y += 2
isFalling = true;
}
}
// ----------------------------------
// Collectable items render and check functions
// ----------------------------------
// Function to draw collectable objects.
function drawCollectable(t_collectable)
{
stroke(1);
fill(255,215,0);
ellipse(t_collectable.x_pos,
t_collectable.y_pos - 20,
t_collectable.size,
t_collectable.size);
ellipse(t_collectable.x_pos,
t_collectable.y_pos - 20,
t_collectable.size - 10,
t_collectable.size - 10);
fill(0, 0, 0);
text("$", t_collectable.x_pos - 3,
t_collectable.y_pos - 16);
}
// Function to check character has collected an item.
function checkCollectable(t_collectable)
{
if(dist(gameChar_world_x, gameChar_y,
t_collectable.x_pos, t_collectable.y_pos - 20) < t_collectable.size)
{
t_collectable.isFound = true;
game_score += 1;
}
}
function checkPlayerDie()
{
console.log(lives);
if(gameChar_y > height)
{
lives = true;
lives = lives -= 1;
}
if(lives == true)
{
startGame;
}
}
function startGame()
{
gameChar_x = width/2;
gameChar_y = floorPos_y;
treePos_y = height/2;
// Variable to control the background scrolling.
scrollPos = 0;
// Variable to store the real position of the gameChar in the game
// world. Needed for collision detection.
gameChar_world_x = gameChar_x - scrollPos;
// Boolean variables to control the movement of the game character.
isLeft = false;
isRight = false;
isFalling = false;
isPlummeting = false;
// Initialise arrays of scenery objects.
trees_x = [25,
75,
125,
360,
410,
460,
800,
850,
900,
1240,
1290,
1340,
1680,
1730,
1780
];
clouds = [
{pos_x: 50, pos_y: 50},
{pos_x: 300, pos_y: 70},
{pos_x: 550, pos_y: 110},
{pos_x: 800, pos_y: 70},
{pos_x: 1000, pos_y: 50},
{pos_x: 1250, pos_y: 70},
{pos_x: 1500, pos_y: 110},
{pos_x: 1750, pos_y: 50}
];
mountains = [
{pos_x: 75, pos_y: 432},
{pos_x: 175, pos_y: 432},
{pos_x: 775, pos_y: 432},
{pos_x: 1675, pos_y: 432},
{pos_x: 1975, pos_y: 432},
];
collectables = [
{x_pos: 566, y_pos: floorPos_y, size: 30, isFound: false},
{x_pos: 700, y_pos: floorPos_y, size: 30, isFound: false},
{x_pos: 1100, y_pos: floorPos_y, size: 30, isFound: false},
{x_pos: 1900, y_pos: floorPos_y, size: 30, isFound: false}
];
canyon = [
{pos_x: 590, width: 100},
{pos_x: 1450, width: 100}
];
game_score = 0;
flagpole = {isReached: false, x_pos: 2000}
}
function renderFlagpole()
{
push();
strokeWeight(5);
stroke(255);
line(flagpole.x_pos, floorPos_y, flagpole.x_pos, floorPos_y - 350);
fill(255, 215, 0);
noStroke();
if(flagpole.isReached)
{
rect(flagpole.x_pos, floorPos_y - 50, 75, 50);
}
else
{
rect(flagpole.x_pos, floorPos_y - 350, 75, 50);
}
pop();
}
function checkFlagpole()
{
var d = abs(gameChar_world_x - flagpole.x_pos);
if(d < 15)
{
flagpole.isReached = true;
}
}
最佳答案
我相信你的错误在这里:
function checkPlayerDie()
{
console.log(lives);
if(gameChar_y > height)
{
lives = true;
lives = lives -= 1;
}
if(lives == true)
{
startGame;
}
}
lives = true;
lives = lives -= 1;
lives
是一个整数值,计算 Angular 色剩余生命的数量。但是,您将值更改为 bool 值
true
值,基本上丢弃任何存在的数量。因此,因为
true - 1
结果
0
你立即失去了所有现有的生命。
if
以下条件到
if (lives > 0)
,如果我正确理解你的逻辑。
lives = lives -= 1
.在这里你是多余的,因为你结合了
Assignment Operator与
Substraction Assignment operator .您应该将其更改为仅
lives -= 1;
或
lives = lives - 1;
.
if
第一个
if
中的声明陈述。这是我所做的编辑,导致它正常工作:
function checkPlayerDie()
{
console.log(lives);
if(gameChar_y > height)
{
lives -= 1;
if(lives > 0)
{
startGame();
}
}
}
关于javascript - 如何使用 P5.JS 在我的游戏中添加 "lives"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60711084/
关于strcat函数。 while (*p) p++; 和 while (*++p) ; 两者都有效,但是 while (*p++) ; 不起作用。我认为 first 和 th
" in HTML?(HTML中的““是什么
?)
下面例子中的第一行代码是什么。我看到一个YouTuber在写下面的代码,它显示了一个设计在csswar Challenges中。我也尝试了一下,它很管用。但我以前从未在任何HTML教程上看到过它,我在
vs.
是不间断空格,表示没有换行的空白处。 如果我用 我在两个段落之间有一个空格(更大的间隔)。如果我使用 我在两个段落之间只有一个新行(没有中断)。为什么? 最佳答案 在 HTML 中
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 9
我对编程还很陌生,只是想知道为什么这段代码: for ( ; *p; ++p) *p = tolower(*p); 当 p 指向一个字符串时,可以降低 c 中字符串的大小写吗? 最佳答案 一般来说,这
代码 int n = 25; int *p = &n; printf("%x\n %d\n %x\n", p, p[0], p[1]); 返回: \ 当然我永远不会这样做,但在 K&R 中声明
所以,我想创建一个简单的程序,返回有关连续素数的计算结果。首先,我创建一个包含所有这些素数的列表,然后尝试计算结果,但这给了我一个超出范围的索引。有人可以帮助我吗?我的程序: primes = []
这个问题在这里已经有了答案: With arrays, why is it the case that a[5] == 5[a]? (20 个答案) 关闭 9 年前。 我想知道 C/C++ 中以下四
我仍在努力理解 *p、&p 和 p 之间的区别。根据我的理解,* 可以被认为是“指向的值”,而 & 可以被认为是“地址”。换句话说,* 保存值,而 & 保存地址。如果这是真的,那么 *p 和 p 之间
你是吗? [xxxrecipientFirstNamexxx]
和你是吗? {recipientFirstName}
需要更换 你是吗? [xxxrecipientFirstNamexxx] 和 你是吗? {recipientFirstName} 。我尝试使用边界匹配器。但结果并不符合预期。我尝试使用下面的代码 "A
我想按 IsTop 属性升序排序对象,然后按 JobId 属性降序排序: query = query.OrderBy(p => p.IsTop).ThenOrderByDescending(p =
在我尝试使用 Apache POI 进行转换的 Excel 文件中,我有一个单元格的数值为 -3.97819466831428,自定义格式为“0.0 p.p.;(0.0 p.p.)”。因此,在 Exc
我想创建一个扩展方法,允许我调用 ToSerializableDictionary(p => p.ID)而不是 .ToDictionary(p => p.ID)在以下 LINQ 上下文中。虽然我不确定
在下面的 HTML 代码上运行此 jQuery 代码会返回不同的结果,我认为它们应该返回相同的值。 jQuery 代码: var counter = 0; $("p").each(function()
在下面的代码片段中,符号 *p 等同于 p[0],*(p + 1) 等同于p[1],依此类推。 int* p = new int[3] { 1, 2, 3}; cout << *p << ' ' <<
这个问题在这里已经有了答案: What will happen when I call a member function on a NULL object pointer? [duplicate]
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Undefined Behavior and Sequence Points 按照标准中的定义,E1 +=
" in HTML?(在HTML中“
以下示例中的第一行代码是什么。我看到一个youtube用户写下面的代码,它显示在cssbattle挑战的设计。我也试过,它的作品。但我从来没有见过它在任何HTML教程之前,我在谷歌上搜索它,但它只显示
每当我收到来自 MS outlook 的电子邮件时,我都会收到此标记 & nbsp ; (没有空格)哪个显示为?在 <>. 当我将其更改为 ISO-8859-1 时,浏览器页面字符集编码为 UTF-8
p1
TESTp2
代码: from bs4 import BeautifulSoup soup = BeautifulSoup('p1TESTp2') print soup.div() 结果: [p1, p2] 为什么
我是一名优秀的程序员,十分优秀!