下面是生成一个“围住神经猫”游戏的初始场景:

1,界面下方会生成9*9共81个圆点,同时圆点内部添加文本标签显示索引
2,默认圆点为灰色,每行随机取两个点变为红色
3,奇数行和偶数行有一定的错位,错位的横向距离是圆的半径
效果图如下:
1,首先给资源库Images.xcassets添加资源图片:
2,圆点类 GaPoint.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import SpriteKit
 
//圆点类型枚举
enum PointType:Int{
    //灰0 红1
    case gray=0,red;
}
 
class GaPoint:SKSpriteNode{
 
    //自身索引
    var index = 0
    //圆点类型,默认为灰色点
    var type = PointType.gray
    //圆点内的文本节点
    var label:SKLabelNode?
     
    //设置文本节点的文字
    func onSetLabel(i:String){
        if label == nil {
            //文本节点的字体
            label = SKLabelNode(fontNamed:"Chalkduster")
            //文本节点的字体大小
            label!.fontSize = 22
            //文本节点的位置
            label!.position = CGPointMake(0, -10)
            //取消文本节点的交互性
            label!.userInteractionEnabled = false
            //将文本节点加入圆点类
            self.addChild(label!)
        }
        //设置文本节点的内容
        label!.text = i
    }
}

3,圆点容器类 PointContainer.swift

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import SpriteKit
 
class PointContainer:SKNode,UIAlertViewDelegate{
    //灰点纹理
    let textPoint1 = SKTexture(imageNamed: "pot1")
    //红点纹理
    let textPoint2 = SKTexture(imageNamed: "pot2")
    //记录所有圆点的数组
    var arrPoint = [GaPoint]()
    
    func onInit(){
        for i in 0...80 {
            //默认为灰色点
            let point = GaPoint(texture: textPoint1)
            //对行数除以9取整,用来为下面判断奇偶行做准备
            let row = Int(i/9)
            //列
            let col = i%9
            //x轴位移
            var gap = 0
            //奇偶行判断
            if Int(row % 2) == 1 {
                gap = Int(textPoint1.size().width)/2
            }else {
                 
            }
            //取得纹理尺寸,用作计算位置
            let width = Int(textPoint1.size().width)
            //计算x坐标
            let x  = col * (width+5) - (9*width)/2 + gap
            //计算y坐标
            let y  = row * width - (9*width)/2
            //设置位置
            point.position = CGPointMake(CGFloat(x),CGFloat(y))
             
            //记录索引
            point.index = i
            point.onSetLabel("\(i)")
            //设置z轴排序
            point.zPosition = 10
            //将点加入PointContainer中
            self.addChild(point)
            //将点加入数组中
            arrPoint.append(point)
        }
 
        //随机生成红点
        onCreateRed()
    }
     
    //随机生成红色的点
    func onCreateRed(){
        for i in 0...8 {
            let r1 = Int(arc4random() % 9) + i * 9
            let r2 = Int(arc4random() % 9) + i * 9
            onSetRed(r1)
            onSetRed(r2)
        }
    }
     
    //改变圆点类型
    func onSetRed(index:Int){
        arrPoint[index].type = PointType.red
        arrPoint[index].texture = textPoint2
    }
}

4,主界面 GameScene.swift

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import SpriteKit
 
class GameScene: SKScene {
     
    let pointContainer = PointContainer()
     
    //当切换到这个场景视图后
    override func didMoveToView(view: SKView) {
        //将Images.xcassets中的bg.jpg 来制作背景
        var bg = SKSpriteNode(imageNamed: "bg")
        //设置位置
        bg.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
        self.addChild(bg)
         
        //设置圆点容器
        pointContainer.position = CGPoint(x:CGRectGetMidX(self.frame)-10,
            y:CGRectGetMidY(self.frame)-150);
        self.addChild(pointContainer)
        pointContainer.onInit()
         
    }
    //响应屏幕点击的方法
    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
         
    }
}

Swift - 在界面上生成81个随机红,灰色圆点(SpriteKit游戏开发)的更多相关文章

  1. Swift - 多层无缝循环滚动背景(SpriteKit游戏开发)

    在游戏开发中,比如跑酷游戏.我们需要实现背景的无限循环滚动,来营造运动的效果.除了单层的背景滚动,还有视差滚动. 视差滚动是指让多层背景以不同的速度移动,形成立体的效果,从而带来非常出色的视觉体验. ...

  2. Swift - 跑酷游戏开发(SpriteKit游戏开发)

    一,下面演示了如何开发一个跑酷游戏,实现的功能如下: 1,平台工厂会不断地生成平台,并且向左移动.当平台移出游戏场景时就可将其移除. 2,生成的平台宽度随机,高度随机.同时短平台踩踏的时候会下落. 3 ...

  3. Swift - 跳跃吃苹果游戏开发(SpriteKit游戏开发)

    下面通过一个样例演示如何实现飞行道具的生成,以及道具碰撞拾取. 样例说明: 1,屏幕从右到左不断地生成苹果飞过来(苹果高度随机) 2,点击屏幕可以让熊猫跳跃 3,熊猫碰到苹果,苹果消失 运行效果: 样 ...

  4. Swift - 给游戏添加背景音乐和音效(SpriteKit游戏开发)

    游戏少不了背景音乐和音效.下面我们通过创建一个管理音效的类,来实现背景音乐的播放,同时点击屏幕可以播放相应的音效. 声音管理类 SoundManager.swift 1 2 3 4 5 6 7 8 9 ...

  5. Swift - 使用atlas图集实现动画效果(SpriteKit游戏开发)

    我们通常继承SKSpriteNode来实现游戏中的元素,除了可以使用图片作为纹理皮肤外.我们还可以使用动画纹理集来实现动画播放. 动画纹理集的制作也很简单,首先要有一套动画序列图,然后把它们放到一个文 ...

  6. Swift - 获取屏幕点击坐标下所有对象(SpriteKit游戏开发)

    对于场景内对象元件的点击响应,我们可以在场景的touchesBegan()方法中内统一处理. SKScene中touchesBegan()是响应屏幕点击的方法,在这里面我们可以先获取点击位置下所有的对 ...

  7. Swift - 创建并设置背景(SpriteKit游戏开发)

    1,先把背景图片bg.jpg,bg@2x.jpg直接拖进Images.xcassets中 2,设置如下代码(背景图直接铺满整个屏幕) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  8. python之gui-tkinter可视化编辑界面 自动生成代码

    首先提供资源链接 http://pan.baidu.com/s/1kVLOrIn#list/path=%2F

  9. 基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出

    数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,我曾经在之前的一篇文章<Winform开发框架之通用数据导入导出操作>介绍了在Winform ...

随机推荐

  1. iOS 之 UINavigationController 记录

    有一阵子没有写随笔,感觉有点儿手生.一个多月以后终于又一次坐下来静下心写随笔,记录自己的学习笔记,也希望能够帮到大家. 废话少说回到正题,UINavigationController是IOS编程中比较 ...

  2. MAC安裝《Genymotion Android模擬器》大玩Android APP (神魔之塔)

    链接地址:http://www.minwt.com/mac/10083.html/comment-page-2 MAC» 智慧型裝罝» Android | 2014/02/12 Android是一個開 ...

  3. xzzx

    创建包: CREATE OR REPLACE PACKAGE WYL_TEST_PKG_GGYW_XZZX IS -- Purpose : 公共业务-参保险种注销 --注销选择的险种,并将参保缴费信息 ...

  4. FileDescriptor

    FileDescriptor 在java中的java.io包下面 public final class FileDescriptor { ... } 官方的解释: 文件描述符类的实例用作与基础机器有关 ...

  5. tar 基础

    如何安装---> 出门右转百度. 1.基本使用方式 tar [option] desc_file source_file desc_file 表示要生成的打包文件:source_file 表示需 ...

  6. Steve Yegge:Google面试秘籍

    我憋了很长时间想写点关于去Google面试的秘籍.不过我总是推迟,因为写出来的东西会让你抓狂.很可能是这样.如果按统计规律来定义"你"的话,这文章很可能让你不爽. 为啥呢?因为啊- ...

  7. BZOJ 2318: Spoj4060 game with probability Problem( 概率dp )

    概率dp... http://blog.csdn.net/Vmurder/article/details/46467899 ( from : [辗转山河弋流歌 by 空灰冰魂] ) 这个讲得很好 , ...

  8. 第一个hibernate文件 xml配置方法

    package com.entity; public class User { private String username; private String password; private In ...

  9. Qt 学习之路 2(75):线程总结

    前面我们已经详细介绍过有关线程的一些值得注意的事项.现在我们开始对线程做一些总结. 有关线程,你可以做的是: 在QThread子类添加信号.这是绝对安全的,并且也是正确的(前面我们已经详细介绍过,发送 ...

  10. HNCU1741:算法3-2:行编辑程序

    http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1741 题目描述 一个简单的行编辑程序的功 ...