zoukankan      html  css  js  c++  java
  • 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












  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/lixingle/p/3707706.html
Copyright © 2011-2022 走看看