Cocos2D:塔防游戏制作之旅(十)

简介:

这里写图片描述

最终,draw方法显示这些路径点被放置在哪里,并且绘制出路径点之间的连线,它们仅仅被用作调试.一个成品游戏不应该绘制敌人的路径 - 那对于玩家来说太过容易了!

创建路径点的列表.打开HelloWorldLayer.h并且添加以下属性:

@property (nonatomic,strong) NSMutableArray *waypoints;

下一步,添加以下代码到HelloWorldLayer.m文件中:

//At the top of the file:
#import "Waypoint.h"

// Add synthesise
@synthesize waypoints;

//Add this method 
-(void)addWaypoints
{
    waypoints = [[NSMutableArray alloc] init];

    Waypoint * waypoint1 = [Waypoint nodeWithTheGame:self location:ccp(420,35)];
    [waypoints addObject:waypoint1];

    Waypoint * waypoint2 = [Waypoint nodeWithTheGame:self location:ccp(35,35)];
    [waypoints addObject:waypoint2];
    waypoint2.nextWaypoint =waypoint1;

    Waypoint * waypoint3 = [Waypoint nodeWithTheGame:self location:ccp(35,130)];
    [waypoints addObject:waypoint3];
    waypoint3.nextWaypoint =waypoint2;

    Waypoint * waypoint4 = [Waypoint nodeWithTheGame:self location:ccp(445,130)];
    [waypoints addObject:waypoint4];
    waypoint4.nextWaypoint =waypoint3;

    Waypoint * waypoint5 = [Waypoint nodeWithTheGame:self location:ccp(445,220)];
    [waypoints addObject:waypoint5];
     waypoint5.nextWaypoint =waypoint4;

    Waypoint * waypoint6 = [Waypoint nodeWithTheGame:self location:ccp(-40,220)];
    [waypoints addObject:waypoint6];
     waypoint6.nextWaypoint =waypoint5;

}

// At the end of init:
// 4 - Add waypoints
[self addWaypoints];

编译运行游戏,你将看到如下画面:

这里写图片描述

在地图上有6个路径点;敌人将跟随它们组成的路径.在你将坏家伙们放置在你游戏中之前,你需要添加一些帮助方法.

首先,在头文件中添加方法定义,以便其他类可以访问该方法而不招至编译器的警告.

打开HelloWorldLayer.h文件,在@end之前添加以下代码:

-(BOOL)circle:(CGPoint)circlePoint withRadius:(float)radius 
       collisionWithCircle:(CGPoint)circlePointTwo collisionCircleRadius:(float)radiusTwo;
void ccFillPoly(CGPoint *poli, int points, BOOL closePolygon);
-(void) enemyGotKilled;
-(void) getHpDamage;

下一步,打开HelloWorldLayer.m文件,同样在@end之前添加以下代码:

-(BOOL)circle:(CGPoint) circlePoint withRadius:(float) radius 
       collisionWithCircle:(CGPoint) circlePointTwo collisionCircleRadius:(float) radiusTwo {
    float xdif = circlePoint.x - circlePointTwo.x;
    float ydif = circlePoint.y - circlePointTwo.y;

    float distance = sqrt(xdif*xdif+ydif*ydif);

    if(distance <= radius+radiusTwo) 
        return YES;

    return NO;
}

该collisionWithCircle方法将帮助我们确定两个圆的碰撞或者说是相交.它将确定敌人是否到达路径点,同样也可以检查敌人是否进入了炮塔的攻击范围.

相关文章
|
图形学
Unity 3D游戏-消消乐(三消类)教程和源码
Unity 消消乐教程和源码 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) ...
5311 0
|
4月前
|
算法
连连看游戏系列教程开篇
连连看游戏系列教程开篇
22 0
|
11月前
|
人工智能 移动开发 数据可视化
不会游戏编程还能制作游戏吗?(附无代码游戏制作软件推荐)
在这个时代,你不懂摄影,但是却可以用手机轻松地拍出好看的照片;你不懂图像处理,但是却可以一键让你的照片显示出各种各样的效果;你不懂画画,但是却可以通过语言描述,让 AI 帮助你画出你可能凭借自己永远都无法画出的作品......工具在不断的降低创作的门槛,让越来越多的人能够做一些原本只有少数人才能做到的事。
497 0
|
11月前
|
开发工具
是时候重新介绍一下小蚂蚁的游戏开发服务了
这可能是你能找到的门槛最低的游戏开发课程了,无需具备游戏开发经验,无需美术经验,也无需编程经验,只需你有一颗想要做游戏的心。跟随着这个系统全面的游戏开发课程,它会一步一步的帮助你做出第一个小游戏,带你进入游戏开发世界的大门。
79 0
|
11月前
小蚂蚁游戏开发的视频号
最近除了写图文教程,小蚂蚁也开通了视频号,开始做短视频了。 为什么要做短视频呢?因为这是趋势,不管你愿不愿意承认,短视频的洪流已经冲过来了,作为个体,在面对趋势时,最好的策略呢,就是去顺应。 虽然我个人更倾向于看文字或者是图文,而且也更愿意去写图文教程。但是,在趋势面前,我还是尝试着去做短视频了,而且也做了几次直播。虽然目前还没有什么效果,但是慢慢来吧!没有谁能一上手就做的很好,慢慢积累吧!毕竟我是一个相信通过持续不断的积累定会产生好结果的人。
56 0