美文网首页手把手教你Unity开发俄罗斯方块
第二十三节 实现左右移动方块

第二十三节 实现左右移动方块

作者: 安静的程序员 | 来源:发表于2019-06-25 08:42 被阅读0次
01.监测按键

因为键盘什么时候按下是不确定的,所以必须要实时监测是否按下了键盘,而Unity中的Update()方法就是实时调用的,所以凡是与按键有关的逻辑都应写在该方法中。
现在,来添加一行代码,当按下键盘上的左方向键时,输出“按下左方向键”:

if (Input.GetKeyDown(KeyCode.LeftArrow)) Debug.Log("按下左方向键");

运行游戏后,按下左方向键,会输出“按下左方向键”。

02.实现左移和右移

添加一个方法MoveLeftBlock(),左移的原理就是图层的横坐标(列)向左移动一格:

// 左移方块
void MoveLeftBlock()
{
    MyPoint newPoint = _blockLayer.Point;
    newPoint._list -= 1;
    _blockLayer.Point = newPoint;
    _screenMain.RefreshScreen();
}

右移的方法也一样:

// 右移方块
void MoveRightBlock()
{
    MyPoint newPoint = _blockLayer.Point;
    newPoint._list += 1;
    _blockLayer.Point = newPoint;
    _screenMain.RefreshScreen();
}

然后在按键事件中调用左移和右移:

void Update()
{
    // 左移方块
    if (Input.GetKeyDown(KeyCode.LeftArrow)) MoveLeft-Block();
    // 右移方块
    if (Input.GetKeyDown(KeyCode.RightArrow)) MoveRightBlock();
}

运行游戏后,按下左右方向键后,方块会左右移动,但只能移动一次,因为GetKeyDown()只在你每次按下时有效。键盘监测有三个方法:GetKeyDown()——按键按下;GetKey()——按着不放;GetKeyUp()——按键松开。

03.连续移动

将GetKeyDown()改成GetKey()就可以实现连续移动,只是太快了,如果按照60帧每秒算的话,一秒钟可以移动60个格子,显然我不想要这种连续移动。
我想要的连续移动是:按下左方向键后,立即向左移动一格,如果左方向键在一定时间内没有松开,就继续向左一格一格匀速移动。同时,左右方向键不能冲突,就是同时只能朝一个方向移动。
实现方案非常简单,就是按下按键后,启动定时器,松开后不需要移动了,就关闭定时器。然后,在切换方向时,先关闭上一个方向的定时器。下面是代码:

void Update()
{
    // 按键 - 左方向键
    if (Input.GetKeyDown(KeyCode.LeftArrow))
    {
        // 立即向左移动一格
        MoveLeftBlock();
        // 取消右移
        CancelInvoke("MoveRightBlock");
        InvokeRepeating("MoveLeftBlock", 0.3f, 0.1f);
    }
    if (Input.GetKeyUp(KeyCode.LeftArrow))
    {
        CancelInvoke("MoveLeftBlock");
    }

    // 按键 - 右方向键
    if (Input.GetKeyDown(KeyCode.RightArrow))
    {
        // 立即向右移动一格
        MoveRightBlock();
        // 取消左移
        CancelInvoke("MoveLeftBlock");
        InvokeRepeating("MoveRightBlock", 0.3f, 0.1f);
    }
    if (Input.GetKeyUp(KeyCode.RightArrow))
    {
        CancelInvoke("MoveRightBlock");
    }
}

目前,左右移动已经实现了,但是会移出边界,下一节,我们来解决左右移动的碰撞问题。

代码链接:https://pan.baidu.com/s/1Di3FbmQLIpC29YchV9kiGg
提取码:79in

相关文章

网友评论

    本文标题:第二十三节 实现左右移动方块

    本文链接:https://www.haomeiwen.com/subject/fbuzqctx.html