IOS学习之路五(SpriteKit 开发飞机大战小游戏一)

参考SpriteKit 创建游戏的教程今天自己动手做了一下,现在记录一下自己怎么做的,今天之做了第一步,一共有三个部分。

第一步,项目搭建。

项目所用图片资源:点击打开链接

1.在Xcode打开之后,选择File Menu > New > Project,然后你可能会看到下面的示意图所显示的内容:

iOS-7-SDK_SpriteKit-Airplane_Image1.png

随便起个名字,我就叫它: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












原文地址:https://www.cnblogs.com/lixingle/p/3707706.html