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坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) ...
5569 0
|
6月前
|
C# 图形学
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
358 2
|
6月前
|
算法
连连看游戏系列教程开篇
连连看游戏系列教程开篇
95 0
游戏开发零基础入门教程(14):把游戏分享给朋友们
你的第一个小游戏已经完成了,现在是时候把它分享给朋友们了。无需担心它看起来怎样,是否太过简单或者粗糙。总之它是你的第一个游戏作品,你值得为之高兴,也值得将这快乐分享出去。
121 0
|
设计模式 测试技术 Android开发
基于VS2012和Cocos2d-x实现的StickToLast益智小游戏
基于VS2012和Cocos2d-x实现的StickToLast益智小游戏
161 0
基于VS2012和Cocos2d-x实现的StickToLast益智小游戏