Swift - 在界面上生成81个随机红,灰色圆点(SpriteKit游戏开发)
2023-09-11 14:17:59 时间
下面是生成一个“围住神经猫”游戏的初始场景:
![](http://www.hangge.com/blog_uploads/201505/2015051514024157863.png)
![](http://www.hangge.com/blog_uploads/201505/2015051514272964643.png)
3,圆点容器类 PointContainer.swift
4,主界面 GameScene.swift
1,界面下方会生成9*9共81个圆点,同时圆点内部添加文本标签显示索引
2,默认圆点为灰色,每行随机取两个点变为红色
3,奇数行和偶数行有一定的错位,错位的横向距离是圆的半径
效果图如下:
![](http://www.hangge.com/blog_uploads/201505/2015051514024157863.png)
1,首先给资源库Images.xcassets添加资源图片:
![](http://www.hangge.com/blog_uploads/201505/2015051514272964643.png)
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 ) { } } |
相关文章
- (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
- (NO.00002)iOS游戏精灵战争雏形(五)
- PokemonGo:LBS游戏开发
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
- MVC模式在游戏开发的应用
- win8 开发之旅(10) --五子棋游戏开发 错误提醒和纠错
- win8 开发之旅(7) --五子棋游戏开发
- win8 开发之旅(6) --五子棋游戏开发
- win8 开发之旅(2) --连连看游戏开发 项目错误的总结
- 西游释厄传2游戏技巧
- Java实现 蓝桥杯 历届试题 数字游戏
- Android游戏开发基本知识
- 教你怎么做游戏运营数据分析
- 【ANDROID游戏开发之一】设置全屏以及绘画简单的图形
- 【ANDROID游戏开发二十三】自定义LISTVIEW【通用】适配器并实现监听控件!
- 【IOS-COCOS2D-X 游戏开发之十四】XCODE中C++&OBJECT-C混编,详细介绍如何在COCOS2DX中访问OBJECT函数以及APPLE API
- 【转】【UNITY3D 游戏开发之四】有关实现2D帧序列帧播放相关—ANIMATING TILEDTEXTURE
- 【转】使用UNITY 3D开发IOS游戏入门教程系列(1)
- 【云栖大会】探索云时代下的游戏开发模式
- Python 控制台操作的文字版“数独”游戏(非GUI版本)
- 一个使用ABAP Push Channel开发的乒乓球游戏,可以双打
- 游戏开发与设计
- 怎么样学习开发游戏呢?
- 游戏制作之路(45)地形凹凸工具
- 游戏制作之路(39)加载人形的动画2
- 零基础小白如何自学 Unity 游戏开发?(送 Unity 教程)
- 使用codeblock开发图形化游戏