(NO.00004)iOS实现打砖块游戏(十三):伸缩自如,我是如意金箍棒(下)!

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)


准备缩短反弹棒素材

和上一篇类似,我们如法炮制一张缩短后反弹棒的素材.

打开SpriteBuilder,新建StickShorter.ccb文件,按下图绘制其sprite帧和物理对象:

注意,在Ai中缩小和放大原来反弹棒的图片时,只要沿X轴一个方向放大即可,否则在Y轴方向也会变大,这就不是我们想要的了.

创建缩短道具星

我们用红色的星星表示缩短道具,所以spawStar中是这样写的:

case brkColorRed:
            star = [Star starWithType:starTypeStickShorter];
            break;

在GameScene.m中,在星星与反弹棒碰撞的代码中,加入如下代码:

case starTypeStickShorter:
            @synchronized(self){
                [self scheduleBlock:^(CCTimer *timer){
                    [Star doStickShorterWork:self.stickInGameScene];
                } delay:0];
            }
            break;

好了,最后我们回到Star.m中添加doStickShorterWork方法:

+(void)doStickShorterWork:(Stick *)stick{
    GameScene *gameScene = [GameScene sharedGameScene];
    CCPhysicsNode *physicsWorld = (CCPhysicsNode*)stick.parent;

    @synchronized(gameScene){
        if ([stick.name isEqualToString:@"stickShorter"]) {
            return;
        }

        if ([stick.name isEqualToString:@"stickLonger"]) {
            Stick *stickNormal = [Stick stickNormal];
            stickNormal.position = stick.position;
            [stick removeFromParent];
            //[physicsWorld removeChild:stick cleanup:YES];

            [physicsWorld addChild:stickNormal];
            gameScene.stickInGameScene = stickNormal;
            return;
        }
    }

    CGPoint position = stick.position;

    __block Stick *stickShorter;

    @synchronized(gameScene){
        stickShorter = [Stick stickShorter];
        [stick removeFromParent];
        //[physicsWorld removeChild:stick cleanup:YES];
        stickShorter.position = position;
        [physicsWorld addChild:stickShorter];
        stickShorter.visible = NO;
        gameScene.stickInGameScene = stickShorter;

        CCSprite *stickNode = (CCSprite*)[CCBReader load:@"Elements/StickNode"];
        stickNode.position = stickShorter.position;
        [gameScene addChild:stickNode z:50];

        CCActionScaleTo *shorterAction = [CCActionScaleTo actionWithDuration:0.4f scaleX:0.5f scaleY:1.0f];
        CCActionCallBlock *blk = [CCActionCallBlock actionWithBlock:^{
            [stickNode removeFromParent];
            stickShorter.visible = YES;
        }];
        CCActionSequence *seq = [CCActionSequence actions:shorterAction,blk,nil];
        [stickNode runAction:seq];
    }

    [stickShorter scheduleBlock:^(CCTimer *timer){
        @synchronized(gameScene){
            Stick *stickNormal = [Stick stickNormal];
            stickNormal.position = stickShorter.position;
            [stickShorter removeFromParent];
            [physicsWorld addChild:stickNormal];
            gameScene.stickInGameScene = stickNormal;
        }
    } delay:10];
}

大家可以和变长的对应代码对比下,基本都是一样的.

下面编译运行游戏,效果如下:

大家可以在变短和变长中添加更多的特效,脑洞打开吧,童鞋们 ;)

时间: 2024-10-06 04:00:51

(NO.00004)iOS实现打砖块游戏(十三):伸缩自如,我是如意金箍棒(下)!的相关文章

(NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 通用的星星类已经完成了,下面我们来实现具体的变长和缩短道具. 变长的反弹棒 我们想实现如下功能:在掉落变长星之后,如果反弹棒接到它,则使反弹棒的长度变为原先的2倍. 看似很简单,但实际有一个问题.你不能仅仅延长反弹棒精灵纹理的长度,因为你在这个游戏中使用的是物理引擎,反弹棒的物理对象的大小是不可以在游戏运行中随意变化的. 所以我们需要想办法延长反弹棒的物理大小,

(NO.00004)iOS实现打砖块游戏(十五):导弹发射道具的实现(上)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇中我们实现了3球道具,但是好像还是不过瘾,如果能让反弹棒更具"攻击性"就好了,那么本篇中我们就让它发射导弹直接击毁砖块吧! 导弹道具的功能 我们要实现如下功能: 反弹棒接触到导弹道具星后"长出"一根炮管 该炮管定时向前方发射导弹 导弹碰到砖块则将其击毁,否则飞出屏幕自动销毁 一定时间后炮管消失,导弹发射也随之停止 让棒棒上长出

(NO.00004)iOS实现打砖块游戏(五):游戏场景类

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 创建游戏场景类头文件 在Xcode创建新GameScene类,继承于CCNode,将其头文件替换为以下内容: #import "CCNode.h" @class Stick; @interface GameScene : CCNode <CCPhysicsCollisionDelegate> //读取GameScene中Level中的反弹棒

(NO.00004)iOS实现打砖块游戏(二):实现游戏主界面动画

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 一个内容不错的游戏也要一个好的包装.玩家进入游戏时第一眼看到的是将是游戏的主界面,如何生动的展示一个具有吸引力的界面就是本篇的主题.当然这里无法和商业游戏的主界面相比的,只是展示一下不用写什么代码,也可以把主界面做的比较活泼. 在主界面上添加静态元素 打开SpriteBuilder中的MainScene.ccb文件,将原有控件统统删掉,这时场景变得黑漆漆的一片.

(NO.00004)iOS实现打砖块游戏(十四):3球道具的实现

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 反弹棒变化道具实现前面已经介绍过了,我们下面可以在小球上做些文章,实现一个道具可以变出更多的小球出来. 我们称之为3球道具:当反弹棒碰到该道具时,小球变为3枚,接下来你尽可能保持这些小球不掉落,这样你可以得到比1个球时更多地分数. 打开Xcode,在Star.m中的spawnStar方法条件中加入新的分支: case brkColorPurple: star =

(NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前一篇博文介绍了物理对象中小球与砖块的碰撞处理,在这一篇中我们再来看一下小球与反弹棒碰撞发生的那点事 ;) 小球与反弹棒开始碰撞 同样我们在碰撞中也要调整小球的力矩,所以也要分开处理,首先是碰撞开始时的处理: -(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair ball:(CCNode *)

(NO.00004)iOS实现打砖块游戏(七):关卡类的实现

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 关卡游戏的精髓都集中在游戏的关卡里,其中包含了游戏的所有要素,至于关卡如何管理这些要素这得根据不同游戏想要的效果来决定.我们开始先从在关卡中建立砖块,小球和反弹棒3个元素做起. 创建关卡类 在Xcode中创建Level类,继承于CCNode类.修改头文件为如下内容: #import "CCNode.h" @interface Level : CCNod

(NO.00004)iOS实现打砖块游戏(十):砖块!更多的砖块!

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 到目前为止游戏基本可玩,但是砖块数量是不变的,等玩家打光所有的砖块就会觉得没啥意思了,所以我们必须想办法添加更多的砖块进来. 创建循环保持颜色的实例变量 我们想要按行添加砖块,为了美观,每行砖块的颜色应该都是不同的.所以我们先来建立一个保持当前砖块颜色的实例变量: NSInteger _currentBrickColor; 当然还有一个更新其值的方法: -(vo

从零开始学ios开发(十三):Table Views(下)Grouped and Indexed Sections

在前面2篇关于Table View的介绍中,我们使用的Style都是Plain,没有分组,没有index,这次学习的Table View和iphone中的通讯录很像,有一个个以字符为分割的组,最右边有一列小字符作为index,最顶端有一个搜索栏可以进行搜索,好了,下面开始这次的学习. 1)创建一个新的项目,template选择Single View Application,命名为Sections 2)添加Table View,连接delegate和data source到File's Owner