Swift游戏开发之俄罗斯方块:No.9 添加点击和移动事件

本节内容过后,我们的程序运行起来将是这样的:

我们一步一步来,首先添加点击事件:

接触过iOS开发的应该对这些步骤不陌生,我们要添加UITapGestureDetector到view里面。

打开Main.storyboard,界面应该类似于下面这样

在右下角通过搜索找到 Tap Gesture Recognizer 然后把它拖入到GameViewControllerScene 里面

接下来打开Assistant Editor,界面看起来是这样的:

按住ctrl将Tap Gesture Recognizer 拖入到右侧的GameViewController中

确保你的Connection类型是Action,Name 是 didTap, Type为UITapGestureRecognizer, 之后点击connect,在GameViewController类中应该会添加下面的代码:

这样当点击事件被识别的时候,这个函数将会被执行。接下来我们在这个界面右键点击Tap Gesture Recognizer,把outlets的delegate赋给Game View Controller

就像给GameViewController添加swiftris代理一样,我们再添加上手势的代理吧

接下来运行我们的程序,看看点击屏幕以后,我们的俄罗斯方块能不能旋转。我们的程序应该是这样的:

接下来,我们还需要添加两个手势,添加的过程和Tap Gesture 一模一样。

我们先来添加Pan,也就是移动,确保你的didPan函数和下面的一样:

#1 我们定义个panPointReference点来追踪pan手势的位置。

#2 我们把起始点位置记录下来,然后在#3中计算当前的位置有没有和起始点相差绝对值(abs)超过0.9个block,如果超过了,就执行移动命令

#4可以通过velocityInView来判断手势的方向,正值是向右,负值是向左,然后我们把swiftris向对应的方向移动一格。并且把当前的位置设置成开始的位置,这样确保用户一次可以移动好几格。

但是我在后来玩游戏的过程中发现,很容易移动超过自己想象的位置,而且如果在后面的swipe动作中很容易出发pan,因为0.9个blocksize其实是很小的位置。不过这都不是问题,我们知道了原理,怎样调整就随意了!

接下来运行一下程序,看看是不是我们想象的那样定的吧

接下来我们来完成swipe手势,swipe就是我们移动的时候,方块可以直接快速沿着这个方向移动。重复同样的步骤建立Swipe Gesture Recognizer,name为didSwipe, 需要多一个步骤,如下图所示

确保swipe方向是down。

接下来我们开始修改GameViewController

我们重新输入下#1和#2中没有显示完全的代码

 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer!, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer!) -> Bool {
         return true
     }

// #2
     func gestureRecognizer(gestureRecognizer: UIGestureRecognizer!, shouldBeRequiredToFailByGestureRecognizer otherGestureRecognizer: UIGestureRecognizer!) -> Bool {
         if let swipeRec = gestureRecognizer as? UISwipeGestureRecognizer {
             if let panRec = otherGestureRecognizer as? UIPanGestureRecognizer {
                 return false
             }
         } else if let panRec = gestureRecognizer as? UIPanGestureRecognizer {
             if let tapRec = otherGestureRecognizer as? UITapGestureRecognizer {
                 return true
             }
         }
         return false
     }

#1 部分允许我们的手势同时执行,当然,有些时候我们的手势可能会冲突,所以需要在做些调整

注意到在#2中 如果当前手势是swipe而panRec 手势是otherGestureRecognizer时,在我的代码里面需要return false, 因为我刚开始发现如果是return ture,那么swipe手势一直没法识别,因为它被pan覆盖掉了。而改成false后就正常了。这里算是原版教材俩面的第2 处错误。

大家也可以试试是不是这样的

时间: 2024-10-02 12:13:44

Swift游戏开发之俄罗斯方块:No.9 添加点击和移动事件的相关文章

Swift游戏开发之俄罗斯方块:No.8 游戏规则

每个游戏都有它自己的规则,我们的俄罗斯方块的规则很明显,shape落到最底端时就停止下落,然后下一个shape开始往下落:当任一一个点挡住下落的shape时,整个shape就认为是已经到底了:当一行充满所有blocks时,这行消除,然后所有的往下落一行等等等等. 那么我们现在就开始制定我们的游戏规则,本节过后,我们的程序运行起来是这样子的: 我们首先从自定义的协议(protocol)开始,之前我们已经接触过两个swift自带的协议,hashable和printable.我们首先在swiftris

Swift游戏开发之俄罗斯方块:No.10 最后一步!美化你的程序

好了,本节是我们这系列教程的最后一篇.经过之前的代码磨练,到了最后一步,基本已经没有什么太多的知识点和难点了.最后,我们的程序看起来是非常酷炫的: 从图里可以看到,我们添加了分数和关卡,然后添加了消除方块时的动画效果,其实还有声音.有没有小激动啊,我们这就开始. 首先确保你的属性和图中保持一致. 我们从右下角中找到view,然后把他拖入屏幕中,然后在属性中把它的背景设置成default也就是透明,然后按照图示的坐标和大小设置好 接下来我们拖入进来一个image view,因为这个image是在v

Swift游戏开发实战教程(大学霸内部资料)

Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程详细讲解记忆配对.太空侵略者.Simon记忆.迷你高尔夫.银河大战五个游戏的开发.在项目讲解同时,还着详细介绍了图形绘制.游戏引擎.音频引擎.用户交互.传感器等专向技术.最后,教程讲解苹果专用游戏框架Sprit Kit的使用.为了帮助读者充分了解实际开发,教程还详细讲解游戏开发的必备知识,如帐号绑定.发布游戏等内容

Swift游戏开发案例实战——互动出版网

这篇是计算机类的优质推荐>>>><Swift游戏开发案例实战> 国内第一本Swift游戏开发图书,系统地讲解了Swift 游戏开发的基础知识和各项关键技术 编辑推荐 *国内第一本Swift游戏开发图书,系统地讲解了Swift 游戏开发的基础知识和各项关键技术: *详细讲解了5个游戏的开发过程,如记忆配对.太空侵略者.Simon记忆.迷你高尔夫.银河大战.这些项目将帮助读者更好地理解iOS项目开发的方式和流程: *结合案例,重点对图形.音频和交互等与游戏紧密相关的知识做了

Qt小游戏开发:俄罗斯方块

作为一个即将步入游戏行业的新人,手写经典小游戏是必备技能哦. 预览 由于录屏软件的问题,颜色和帧率与实际有所出入,不过不影响. 步骤 1 新建工程 建一个基类为QWidget的QT gui工程,实际过程中所有gui代码包括界面布局都是手巧的,所以其实不需要简历ui文件. 2 定义游戏数据结构 游戏场景和方块都用二维数组存储,有方块的存1,无方块的存0 场景数据 const int BLOCK_SIZE=25; //单个方块单元的边长 const int MARGIN=5; //场景边距 cons

【开发记录】微信小游戏开发入门——俄罗斯方块

叨叨 我在前一阵子,打算做一个微信小游戏,当然是单机的,只是为了了解小游戏开发的过程,最终选择了俄罗斯方块这一经典小游戏作为demo,源代码已托管值github,当然,这个游戏demo对用不并不友好,但是已经可以让我入门小程序开发了XD. demo地址:https://github.com/nbclw/Laya_Brick 准备 在任何开发前都需要对要开发的东西有一定的了解.准备: 小游戏原理:微信小游戏是属于H5游戏的一种吧,我是这样理解的:在H5中,有一个叫Canvas(画布)的存在,与电脑

【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher

一.简介 最近马三换了一家大公司工作,公司制度规范了一些,因此平时的业余时间多了不少.但是人却懒了下来,最近这一个月都没怎么研究新技术,博客写得也是拖拖拉拉,周六周天就躺尸在家看帖子.看小说,要么就是吃鸡,唉!真是罪过罪过.希望能从这篇博客开始有些改善吧,尽量少玩耍,还是多学习吧~ 好了扯得有点远了,来说说我们今天博客的主题——“用C#和Lua实现Unity中的事件分发机制”,事件分发机制或者叫事件监听派发系统,在每个游戏框架中都是不可或缺的一个模块.我们可以用它来解耦,监听网络消息,或者做一些

Unity游戏开发——自动为动画剪辑添加事件 之 最后几帧的事件不能被调用的问题

最近在做一个根据配置表自动生成动画剪辑clip以及controller的功能.做法是根据配置表配置的动作以及每个动作的关键帧,自动为每个clip添加事件.这样做可以把动画的事件处理在游戏运行之前就计算好然后存到动画文件.anim中,可以提高游戏的运行效率,如果做的再细点,还可以自定义动画事件的传入的参数.比如act游戏中的多段攻击,这些数据一定是配到表中的,我们可以把表中的数据导入成Unity的ScriptableObject类型,然后打成.asset文件,在把他指定给AnimationEven

一步一步教你用Swift开发俄罗斯方块:No.1 建立你的第一个Swift游戏工程

原文地址:https://www.bloc.io/tutorials/swiftris-build-your-first-ios-game-with-swift#!/chapters/677 好了,我们正式开始我们的swift游戏开发! 首先,需要新建一个工程,熟悉iOS开发的童鞋应该对这个步骤不会陌生.我们还是一步一步来吧: 这里有两种途径建立全新的工程,你可以: 如果你的Mac没有运行Xcode,请打开它,然后在欢迎页面点击Create a new Xcode project 这里我还是要重