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应用架构谈 网络层设计方 ...
随机推荐
- Matlab splinetx
function v = splinetx(x,y,u) %SPLINETX Textbook spline function. % v = splinetx(x,y,u) finds the pie ...
- flex builder 4.7 ios 该溶液无法找到设备
行政建议,没有设备 1) 视图itunes 该服务正在启动(Bonjour服务).测试..... .即使没有这样的假设 2)"D:\Program Files\Adobe\Adobe Fla ...
- CSharp设计模式读书笔记(21):状态模式(学习难度:★★★☆☆,使用频率:★★★☆☆)
模式角色与结构: 示例代码:(本示例在具体状态类中实现状态切换,也可以在环境类中实现状态切换.状态模式一定程度上违背开闭原则) using System; using System.Collectio ...
- 抄360于Launcher浮动窗口的屏幕显示内存使用情况(改进版)
MainActivity例如下列: package cc.cc; import android.os.Bundle; import android.view.View; import android. ...
- Font-Awesome 体验 鼠标进入图标变大
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- IIS 7.5 使用URL Rewrite模块简单设置网页跳转
原文 IIS 7.5 使用URL Rewrite模块简单设置网页跳转 我们都知道Apache可以在配置文件里方便的设置针对网页或网站的rewrite,但是最近接手了一组IIS服务器,发现这货简单的没有 ...
- 加载xib文件的两种方式
一.加载xib文件的两种方式 1.方法一(NewsCell是xib文件的名称) NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@&quo ...
- Java导出页面数据或数据库数据至Excel文件并下载,采用JXL技术,小demo(servlet实现)
public class ExportExcelServlet extends HttpServlet { /** * */ private static final long serialVersi ...
- C#秘密武器之扩展方法
原文:C#秘密武器之扩展方法 为何要用扩展方法? 作为一个.NET程序猿,我们经常要跟.net自带类库或者第三方dll类库打交道,有时候我们未必能够通过反编译来查看它们的代码,但是我们通常需要给它们扩 ...
- 创建android phonegap项目
一. 首先需要在Eclipse中创建一个Android项目 打开Eclipse,打开File->New->Project 选择Android Application Project点击Ne ...