If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

按钮控制的场景变更

到现在为止,我们已经做到了让用户点击任何地方,就可以改变场景。但这有一个缺点:我们的场景中没有使用点击进行任何其他的互动。很多游戏和 应用会添加特定的UI元素(比如菜单或者按钮),并且只通过与UI元素互动来进行场景导航。我们来试试在右上角添加一个按钮来控制场景。
按钮是什么?只有两点:1)有一小块可视区域可以点击,2)点击之后有程序来回应。我们先从绘制一小块区域来入手,只需把矩阵函数 rect() 加上文字函数 text() 封装在一个函数里,以便重复调用:
var drawButton = function() {
    fill(81, 166, 31);
    rect(15, 10, 50, 25);
    fill(255, 255, 255);
    textSize(16);
    text("NEXT", 19, 29);
};
我们在哪里调用这个函数呢?要把按钮画在顶部的话,有很多地方可以调用它:
  1. 在程序的一开始,紧接着函数 drawScene1() 之后 2. 在 mouseClicked() 中,绘制完每个场景之后 3. 在 mouseDragged() 中,画出另一个婴儿之后 4. 在 draw() 中,在绘制每帧动画之后
一般原则是,调用函数的次数能满足需要就好,不能多于需要次数。否则,我们就是在浪费电脑的运算资源!
我们需要在 draw() 中调用绘制按钮的函数,否则鼓手一敲鼓按钮就消失了。注意 draw() 方法是在不停的被调用的,比其他任何方法都多。这意味着 只需要draw() 中调用它,其他的情况也都能被满足了。
自己试试吧!如果你想在其他地方也加入按钮,你可以在代码中另外调用。
draw = function() {   
    if (currentScene === 4) {
        drawScene4();
    }
    drawButton();
};
酷!现在我们在每个场景中都有一个按钮了,而且它一直存在。看:
但是,哈哈,你知道有趣在哪吗?按钮什么也没干!我是说,如果只点击按钮区域的话,用户也许会认为按钮有作用。但实际上,点击任何位置都会切换场景。我们来修改 mouseClicked,以便在决定要切换场景之前,能先判断是否点击在按钮区域。
就像在 Intro to JS 中写的按钮代码一样,我们需要一个 if 条件语句来判断鼠标的位置分量 mouseXmouseY 是否满足如下的所有条件:
  • mouseX 是否大于矩形 rect 左边线的 x 坐标?
    • mouseX 是否小于矩形 rect 的右边线的 x 坐标?
    • mouseY 是否大于矩形 rect 上边线的 y 坐标?
    • mouseY 是否小于矩形 rect 下边线的 y 坐标?
&& 来判断四个条件是否同时为真,若是,则进入下一场景:
mouseClicked = function() {
    if (mouseX >= 15 && mouseX <= 65 &&
        mouseY >= 10 && mouseY <= 45) {
        ...
    }
};
搞定!通过这个判断,程序实现了用户点击特定的区域才能进入下一场景的功能。试试点击按钮区域内和区域外有什么不同:
现在我们已经可以判断用户的一次点击是否表明是想切换场景,那么只要用户不是点击在按钮上,我们可以通过点击来实现其他互动。这意味着用户可以通过点击,而不是拖动,来增加婴儿数,这正我们最初的需求。我们只需要在 if 语句中增加一个 else,然后把 mouseDragged 中的代码移动到 else 语句中:
mouseClicked = function() {
    if (mouseX >= 15 && mouseX <= 65 &&
        mouseY >= 10 && mouseY <= 45) {
        ...
    } else {
        if (currentScene === 5) {
            image(getImage("creatures/BabyWinston"),
                  mouseX-20, mouseY-20);
        }
    }
};
注意我们需要持续判断当前场景,来确保增加孩子这件事只发生在场景5。但现在,我们可以很容易的在其他场景添加其他互动。你还想让用户增加什么呢?鼓?炫酷的发型?用下面的程序自己来试试吧:

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.