Cocos2d-x 游戏中子弹的设计 (一)
01
|
//
|
02
|
// Bullet.h
|
03
|
// FireDemo
|
04
|
//
|
05
|
// Created by LiuYanghui on 13-2-4.
|
06
|
//
|
07
|
//
|
08
|
09
|
#ifndef __FireDemo__Bullet__
|
10
|
#define __FireDemo__Bullet__
|
11
|
12
|
#include "cocos2d.h"
|
13
|
USING_NS_CC;
|
14
|
15
|
class Bullet : public CCLayer {
|
16
|
public :
|
17
|
Bullet();
|
18
|
~Bullet();
|
19
|
CREATE_FUNC(Bullet);
|
20
|
virtual bool init();
|
21
|
|
22
|
void addNewBullet(); //增加一个新子弹
|
23
|
|
24
|
private :
|
25
|
CCSize winSize;
|
26
|
CCArray* m_allBulletArray; //保存所有已存在的子弹对象
|
27
|
|
28
|
CCSpriteBatchNode* m_bulletSprite; //使用BatchNode构建所有的子弹,减少gl绘画次数
|
29
|
|
30
|
void initData();
|
31
|
void moveBullet( float dt); //移动子弹
|
32
|
|
33
|
};
|
34
|
35
|
36
|
#endif /* defined(__FireDemo__Bullet__) */
|
01
|
//
|
02
|
// Bullet.cpp
|
03
|
// FireDemo
|
04
|
//
|
05
|
// Created by LiuYanghui on 13-2-4.
|
06
|
//
|
07
|
//
|
08
|
09
|
#include "Bullet.h"
|
10
|
11
|
#define MOVE_SPEED 100 //子弹的速度
|
12
|
#define REMOVE_POSY -768 //子弹消失的位置,根据自己项目定
|
13
|
14
|
Bullet::Bullet(){
|
15
|
|
16
|
}
|
17
|
18
|
Bullet::~Bullet(){
|
19
|
m_allBulletArray->release();
|
20
|
}
|
21
|
22
|
bool Bullet::init(){
|
23
|
if (!CCLayer::init()) {
|
24
|
return false ;
|
25
|
}
|
26
|
initData();
|
27
|
return true ;
|
28
|
}
|
29
|
30
|
void Bullet::initData(){
|
31
|
winSize = CCDirector::sharedDirector()->getWinSize();
|
32
|
|
33
|
//创建对象数组,保存已存在的子弹
|
34
|
m_allBulletArray = CCArray::create();
|
35
|
m_allBulletArray->retain();
|
36
|
|
37
|
//子弹贴图
|
38
|
m_bulletSprite = CCSpriteBatchNode::create( "bullet.png" );
|
39
|
m_bulletSprite->setPosition(CCPointZero);
|
40
|
addChild(m_bulletSprite);
|
41
|
|
42
|
//更新子弹速度
|
43
|
schedule(schedule_selector(Bullet::moveBullet));
|
44
|
}
|
45
|
46
|
//增加一个新子弹
|
47
|
void Bullet::addNewBullet(){
|
48
|
//构建一个子弹,添加到BatchNode中。
|
49
|
CCSprite* newBullet = CCSprite::createWithTexture(m_bulletSprite->getTexture());
|
50
|
newBullet->setPosition(CCPointZero);
|
51
|
m_bulletSprite->addChild(newBullet);
|
52
|
|
53
|
//添加子弹到已存在子弹数组
|
54
|
m_allBulletArray->addObject(newBullet);
|
55
|
}
|
56
|
57
|
//移动子弹
|
58
|
void Bullet::moveBullet( float dt){
|
59
|
//遍历更新每个子弹的位置
|
60
|
for ( int i = 0; i < m_allBulletArray->count(); ++i) {
|
61
|
//获取一个子弹对象
|
62
|
CCSprite* bullet = (CCSprite*)m_allBulletArray->objectAtIndex(i);
|
63
|
|
64
|
//更新位置
|
65
|
bullet->setPositionY(bullet->getPositionY()-MOVE_SPEED*dt);
|
66
|
|
67
|
//如果已到达消失位置,就移除该子弹
|
68
|
if (bullet->getPositionY() <= REMOVE_POSY) {
|
69
|
m_allBulletArray->removeObjectAtIndex(i);
|
70
|
m_bulletSprite->removeChild(bullet, true );
|
71
|
}
|
72
|
}
|
73
|
}
|
01
|
//
|
02
|
// GameScene.h
|
03
|
// FireDemo
|
04
|
//
|
05
|
// Created by LiuYanghui on 13-2-4.
|
06
|
//
|
07
|
//
|
08
|
09
|
#ifndef __FireDemo__GameScene__
|
10
|
#define __FireDemo__GameScene__
|
11
|
12
|
#include "cocos2d.h"
|
13
|
USING_NS_CC;
|
14
|
15
|
class Bullet;
|
16
|
class GameScene : public CCLayer {
|
17
|
public :
|
18
|
GameScene();
|
19
|
~GameScene();
|
20
|
CREATE_FUNC(GameScene);
|
21
|
static CCScene* scene();
|
22
|
virtual bool init();
|
23
|
virtual void registerWithTouchDispatcher( void );
|
24
|
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
|
25
|
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
|
26
|
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
|
27
|
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
|
28
|
|
29
|
private :
|
30
|
CCSize winSize;
|
31
|
Bullet* m_bullet;
|
32
|
void initData();
|
33
|
|
34
|
};
|
35
|
36
|
#endif /* defined(__FireDemo__GameScene__) */
|
01
|
//
|
02
|
// GameScene.cpp
|
03
|
// FireDemo
|
04
|
//
|
05
|
// Created by LiuYanghui on 13-2-4.
|
06
|
//
|
07
|
//
|
08
|
09
|
#include "GameScene.h"
|
10
|
#include "Bullet.h"
|
11
|
12
|
GameScene::GameScene(){
|
13
|
|
14
|
}
|
15
|
16
|
GameScene::~GameScene(){
|
17
|
|
18
|
}
|
19
|
20
|
CCScene* GameScene::scene(){
|
21
|
CCScene* scene = CCScene::create();
|
22
|
GameScene* layer = GameScene::create();
|
23
|
scene->addChild(layer);
|
24
|
return scene;
|
25
|
}
|
26
|
27
|
bool GameScene::init(){
|
28
|
if (!CCLayer::init()) {
|
29
|
return false ;
|
30
|
}
|
31
|
initData();
|
32
|
return true ;
|
33
|
}
|
34
|
35
|
void GameScene::initData(){
|
36
|
winSize = CCDirector::sharedDirector()->getWinSize();
|
37
|
|
38
|
CCSprite* mainBg = CCSprite::create( "bg.jpg" );
|
39
|
mainBg->setPosition(ccp(winSize.width*.5,winSize.height*.5));
|
40
|
addChild(mainBg);
|
41
|
|
42
|
CCSprite* tank = CCSprite::create( "tank.png" );
|
43
|
tank->setPosition(ccp(winSize.width*.5,winSize.height*.8));
|
44
|
addChild(tank);
|
45
|
|
46
|
//创建子弹对象
|
47
|
m_bullet = Bullet::create();
|
48
|
m_bullet->setPosition(winSize.width*.5,winSize.height*.8);
|
49
|
addChild(m_bullet);
|
50
|
|
51
|
setTouchEnabled( true );
|
52
|
}
|
53
|
54
|
55
|
56
|
void GameScene::registerWithTouchDispatcher( void ){
|
57
|
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate( this , 0, true );
|
58
|
}
|
59
|
60
|
bool GameScene::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
|
61
|
{
|
62
|
//每次点击添加一个新子弹
|
63
|
m_bullet->addNewBullet();
|
64
|
return true ;
|
65
|
}
|
66
|
67
|
void GameScene::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
|
68
|
{
|
69
|
70
|
}
|
71
|
72
|
void GameScene::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
|
73
|
{
|
74
|
75
|
}
|
76
|
77
|
void GameScene::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)
|
78
|
{
|
79
|
80
|
}
|
Cocos2d-x 游戏中子弹的设计 (一)相关推荐
- Cocos2d-x 游戏中子弹的设计(一)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=379 FPS游戏中用的最多的就 ...
- Cocos2d-x 游戏中子弹的设计
FPS游戏中用的最多的就是子弹了,这几天有不少人问我游戏中如何设计子弹?大量子弹显示的时候,游戏会不会卡? 今天有点时间,我针对这两个问题,简单的写了一个子弹的发射. 效果图: 首先我们来理下如何设计 ...
- iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!
2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...
- 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比(一家之言)
初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比 发布于:2013-07-18 11:00阅读数:1984 ...
- iOS cocos2d 2游戏开发实战(第3版)
<iOS cocos2d 2游戏开发实战(第3版)> 基本信息 原书名:Learn cocos2d 2: Game Development for iOS 作者: (美)Steffen I ...
- 网络斗地主游戏的完整设计与实现(二)系统的核心技术路线
引言 在前面的文章<网络斗地主游戏的完整设计与实现(一)项目的基本结构>介绍了项目的整体结构.接下来说明一下系统中用到的核心技术路线 项目的源码可在CSDN资源中下载 游戏界面的呈现 斗地 ...
- 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比
前言 iOS7 beta发布后,大部分开发者和用户的注意力都集中在了iOS 7的全新UI交互设计界面上.一直负责硬件工业设计的Jony Ive首次全面负责苹果的软件和硬件设计工作,自然要把他自己的设计 ...
- 【3D游戏编程与设计】四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版
[3D游戏编程与设计]四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版 基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 下载 Fantasy Skyb ...
- 3D游戏编程与设计 HW 4.5 牧师与恶魔(动作分离版)
3D游戏编程与设计 HW 4.5 牧师与恶魔(动作分离版) 文章目录 3D游戏编程与设计 HW 4.5 牧师与恶魔(动作分离版) 1.作业要求 2.游戏制作 ① 设计思路 ② 设计代码 一.Actio ...
最新文章
- linux 结构体 struct addrinfo 简介
- 初等数论--原根--阶的计算
- linux下使用c进行线程操作
- windows php apc 安装,php-apc 安装
- 运行Java应用必须通过main()方法吗?
- 小巧的KML文件生成工具KML Generator
- gradle下载很慢的解决方式
- 浏览器上网的一些原理
- T400换风扇解决开机fan error问题
- C#用NPOI控件把MySQL数据库中查询符合条件的数据导出到EXCEL
- 统计|(可/无)重复双因素方差分析一般步骤及分析表
- Ch6 深度前馈神经网络
- 用ps制作android日历步骤,绘制一枚日历图标【PS教程】
- 抽丝剥茧,C#面向对象快速上手
- 【机房】软件需求说明书
- echarts 主副标题不换行
- 一款基于flask框架的音乐网站
- “互联网 +”在智慧环保上的深度应用
- 计算机专业的校本教材,计算机专业校本教材编方案(新)
- 七年级上册计算机工作总结,新人教版七年级上教学工作总结