zoukankan      html  css  js  c++  java
  • Swift

    下面是生成一个“围住神经猫”游戏的初始场景:
    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) {
             
        }
    }
  • 相关阅读:
    POJ 1426 Find The Multiple(数论——中国同余定理)
    POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
    POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
    POJ 3278 Catch That Cow(模板——BFS)
    HDU 1071 The area
    HDU 1213 How Many Tables(模板——并查集)
    POJ 1611 The Suspects
    light oj 1214 Large Division
    POJ 1258 Agri-Net(Prim算法求解MST)
    POJ 2387 Til the Cows Come Home(模板——Dijkstra算法)
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4841093.html
Copyright © 2011-2022 走看看