IOS学习之路五(SpriteKit 开发飞机大战小游戏一)
参考SpriteKit 创建游戏的教程今天自己动手做了一下,现在记录一下自己怎么做的,今天之做了第一步,一共有三个部分。
第一步,项目搭建。
项目所用图片资源:点击打开链接
1.在Xcode打开之后,选择File
Menu > New > Project,然后你可能会看到下面的示意图所显示的内容:
随便起个名字,我就叫它:2014airplane了。
2.创建成功后,点击运行如果模板运行成功后接着来。
3.复制这些图片到你项目中的指定目录并且要确保你的“Copy
Items into destination group's folder(如果需要)”被选上。
4.代码修改如下:
MyScene.h中的代码:
//
// MyScene.h
// 2014airplane
// // Copyright (c) 2014年 com.wildcat. All rights reserved.
// #import <SpriteKit/SpriteKit.h>
#import <CoreMotion/CoreMotion.h> @interface MyScene : SKScene<UIAccelerometerDelegate>{
CGRect screenRect;
CGFloat screenHeight;
CGFloat screenWidth;
double currentMaxAccelX;
double currentMaxAccelY; }
//声明变量
//声明运动管理器
@property (strong,nonatomic)CMMotionManager *motionManager;
@property SKSpriteNode *plane; //飞机
@property SKSpriteNode *planeShadow; //飞机倒影
@property SKSpriteNode *propeller; //螺旋桨 @end
MyScene.m中的代码:
//
// MyScene.m
// 2014airplane
//
// Created by wildcat on 14-2-13.
// Copyright (c) 2014年 com.wildcat. All rights reserved.
// #import "MyScene.h" @implementation MyScene -(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
//设置场景大小
screenRect=[[UIScreen mainScreen] bounds];
screenHeight=screenRect.size.height;
screenWidth=screenRect.size.width;
//设置飞机图片
_plane=[SKSpriteNode spriteNodeWithImageNamed:@"PLANE 8 N.png"];
_plane.scale=0.6; //缩放比例
_plane.zPosition=2; //纵坐标
_plane.position=CGPointMake(screenWidth/2, 15+_plane.size.height/2); //设置飞机的初始位置
[self addChild:_plane];
//添加背景
SKSpriteNode *backgroud=[SKSpriteNode spriteNodeWithImageNamed:@"airPlanesBackground.png"];
backgroud.position=CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[self addChild:backgroud];
//添加飞机背景
_planeShadow=[SKSpriteNode spriteNodeWithImageNamed:@"PLANE 8 SHADOW.png"];
_planeShadow.scale=0.6;
_planeShadow.zPosition=1;
_planeShadow.position=CGPointMake(screenWidth/2+15, _planeShadow.size.height/2);
[self addChild:_planeShadow];
//添加螺旋桨
_propeller=[SKSpriteNode spriteNodeWithImageNamed:@"PLANE PROPELLER 1.png"];
_propeller.scale=0.2;
_propeller.position=CGPointMake(screenWidth/2, _plane.size.height+10);
SKTexture *propeller1=[SKTexture textureWithImageNamed:@"PLANE PROPELLER 1.png"];
SKTexture *propeller2=[SKTexture textureWithImageNamed:@"PLANE PROPELLER 2.png"];
SKAction *spin=[SKAction animateWithTextures:@[propeller1,propeller2] timePerFrame:0.1];
SKAction *spinForever=[SKAction repeatActionForever:spin];
[_propeller runAction:spinForever];
[self addChild:_propeller];
//设置运动管理器
self.motionManager=[[CMMotionManager alloc] init];
self.motionManager.accelerometerUpdateInterval=0.2;
[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
[self outputAccelertionData:accelerometerData.acceleration];
if (error) {
NSLog(@"%@",error);
}
}]; }
return self;
}
-(void)outputAccelertionData:(CMAcceleration)acceleration{
currentMaxAccelX=0;
currentMaxAccelY=0;
if (fabs(acceleration.x>fabs(currentMaxAccelX))) {
currentMaxAccelX=acceleration.x;
}
if (fabs(acceleration.y>fabs(currentMaxAccelY))) {
currentMaxAccelY=acceleration.y;
} }
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */ } //Update现在主要处理两件事情:更新你的位置和交换不同的sprite
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
//NSLog(@"one second");
float maxY = screenWidth - _plane.size.width/2;
float minY = _plane.size.width/2;
float maxX = screenHeight - _plane.size.height/2;
float minX = _plane.size.height/2;
float newY = 0;
float newX = 0;
if(currentMaxAccelX > 0.05){
newX = currentMaxAccelX * 10;
_plane.texture = [SKTexture textureWithImageNamed:@"PLANE 8 R.png"];
}
else if(currentMaxAccelX < -0.05){
newX = currentMaxAccelX*10;
_plane.texture = [SKTexture textureWithImageNamed:@"PLANE 8 L.png"];
}
else{
newX = currentMaxAccelX*10;
_plane.texture = [SKTexture textureWithImageNamed:@"PLANE 8 N.png"];
}
newY = 6.0 + currentMaxAccelY *10;
float newXshadow = newX+_planeShadow.position.x;
float newYshadow = newY+_planeShadow.position.y;
newXshadow = MIN(MAX(newXshadow,minY+15),maxY+15);
newYshadow = MIN(MAX(newYshadow,minX-15),maxX-15);
float newXpropeller = newX+_propeller.position.x;
float newYpropeller = newY+_propeller.position.y;
newXpropeller = MIN(MAX(newXpropeller,minY),maxY);
newYpropeller = MIN(MAX(newYpropeller,minX+(_plane.size.height/2)-5),maxX+(_plane.size.height/2)-5);
newX = MIN(MAX(newX+_plane.position.x,minY),maxY);
newY = MIN(MAX(newY+_plane.position.y,minX),maxX);
_plane.position = CGPointMake(newX, newY);
_planeShadow.position = CGPointMake(newXshadow, newYshadow);
_propeller.position = CGPointMake(newXpropeller, newYpropeller); } @end
运行结果如下:
转载请说明:本文转自http://blog.csdn.net/wildcatlele
IOS学习之路五(SpriteKit 开发飞机大战小游戏一)的更多相关文章
- canvas绘制“飞机大战”小游戏,真香!
canvas是ArkUI开发框架里的画布组件,常用于自定义绘制图形.因为其轻量.灵活.高效等优点,被广泛应用于UI界面开发中. 本期,我们将为大家介绍canvas组件的使用. 一.canvas介绍 1 ...
- docker项目——搭建飞机大战小游戏
项目2:搭建打飞机小游戏,验证数据持久化(最底下有链接) 第一步:拉取镜像 [root@localhost docker-image]# docker load < httpd_img.tar. ...
- 用面向对象的编程方式实现飞机大战小游戏,java版
概述 本文将使用java语言以面向对象的编程方式一步一步实现飞机大战这个小游戏 本篇文章仅供参考,如有写的不好的地方或者各位读者哪里没看懂可以在评论区给我留言 或者邮件8274551712@qq.co ...
- IOS学习之路五(代码实现UITableView)
先展示一下运行结果: 代码实现: 1.先创建一个空项目: 2.创建一个Controller:(TableViewController) 在AppDelegate.h中声明属性: // AppDele ...
- IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路
在不知不觉当中已经写了21篇内容 其实一开始是没有想些什么东西的 只是买了Air后 感觉用着挺舒服的,每天可以躺在床上,就一台笔记本,不用网线,不用电源,不用鼠标,不用键盘,干干脆脆的就一台笔记本. ...
- Python之游戏开发-飞机大战
Python之游戏开发-飞机大战 想要代码文件,可以加我微信:nickchen121 #!/usr/bin/env python # coding: utf-8 import pygame impor ...
- 带你使用h5开发移动端小游戏
带你使用h5开发移动端小游戏 在JY1.x版本中,你要做一个pc端的小游戏,会非常的简单,包括说,你要在低版本的浏览器IE8中,也不会出现明显的卡顿现象,你只需要关心游戏的逻辑就行了,比较适合逻辑较为 ...
- 基于FPGA的飞机的小游戏
基于FPGA的飞机的小游戏 实验原理 该实验主要分为4个模块,采用至上而下的设计方法进行设计.由50M的晶振电路提供时钟源,VGA显示控制模块.图形显示控制模块.移动模块的时钟为25M,由时钟分频电路 ...
- 纪录我的iOS学习之路
学习资料的网址 田伟宇(Casa Taloyum)有几篇介绍iOS架构的文章,一级棒!原博客链接. iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方 ...
随机推荐
- robot framework用python扩展编写自定义library
我的utils.py文件 #!/usr/bin/env python #-*- coding:utf8 -*- __version__ = '0.1' import sys reload(sys) s ...
- [CLR via C#]1.1 将源代码编译成托管代码
原文:[CLR via C#]1.1 将源代码编译成托管代码 1. 公共语言运行时(Common Language Runtime,CLR)是一种可由多种编程语言使用的"运行时". ...
- code forces 148D Bag of mice (概率DP)
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- Windows服务之启动、停止、暂停、继续
原文:Windows服务之启动.停止.暂停.继续 Windows服务之启动.停止.暂停.继续 2011-11-09 15:07:37 我来说两句 收藏 我要投稿 [字体:小 大] ...
- MVC验证05-自定义验证规则、验证2个属性值不等
原文:MVC验证05-自定义验证规则.验证2个属性值不等 本文体验2个属性值不等.即当一个属性输入值,另外一个属性输入的值不能和第一个属性值相等.相关文章包括: MVC验证01-基础.远程验证 M ...
- 在C#编程中玩转枚举,分享我的EnumHelper。
在C#编程中玩转枚举,分享我的EnumHelper. 在软件开发过程中,我们经常会为特定的场景下的特定数据定义逻辑意义.比如在用户表中,我们可能会有一个用户状态字段,该字段为整形.如果该字段的值为1则 ...
- winsock2之最简单的win socket编程
原文:winsock2之最简单的win socket编程 server.cpp #include <WINSOCK2.H> #include <stdio.h> #pragma ...
- Effective C++:规定34:区分接口继承和实现继承
(一个) class Shape { public: virtual void draw() const = 0; virtual void error(const string& msg); ...
- Chrome控制台 JS调试
Chrome控制台 JS调试的一些小技巧 $ $_命令返回最近一次表达式执行的结果,功能跟按向上的方向键再回车是一样的,但它可以做为一个变量使用在你接下来的表达式中. $0~$4则代表了最近5个你选择 ...
- 《Shell十三问》笔记(上)
<shell十三问>是网中人前辈首发在CU论坛上对SHELL的一些整理,非常值得一读 注:笔记的标号非问题标号,而是知识点的标号.本篇笔记记录的是1-10问的知识点 (1)IFS:Shel ...