博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift - 在界面上生成81个随机红,灰色圆点(SpriteKit游戏开发)
阅读量:4587 次
发布时间:2019-06-09

本文共 2897 字,大约阅读时间需要 9 分钟。

下面是生成一个“围住神经猫”游戏的初始场景:
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
) {
         
    
}
}

转载于:https://www.cnblogs.com/Free-Thinker/p/4841093.html

你可能感兴趣的文章
在线帮助你修改图片背景的工具 - Clipping Magic
查看>>
BizTalk动手实验(十三)EDI解决方案开发配置
查看>>
初学github
查看>>
iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
查看>>
extjs 下载文件 关键前后端代码
查看>>
.NET 4.0 兼容 .NET 2.0 的方法
查看>>
1001 Maximum Multiple(2018 Multi-University Training Contest 1)
查看>>
对Java对象的认识与理解
查看>>
python——父类与子类的一些说明
查看>>
2019年3月3日 2018-2019-2 20189205《移动平台应用开发实践》第二周作业
查看>>
MySQL 性能优化--优化数据库结构之优化数据类型
查看>>
软件工程之软件需求分析
查看>>
Electron简介和安装使用
查看>>
Improving Visual C++ Debugging with Better Data Display
查看>>
JDBC
查看>>
workspace 配置
查看>>
C# 针对特定的条件进行锁操作,不用lock,而是mutex
查看>>
Spring归纳
查看>>
MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题
查看>>
24小时学通Linux内核之向内核添加代码
查看>>