游戏开发入门03

地图的制作

工具:tiled
步骤:
1.新建——指定宽度和高度——显示网格
2.讲拾取的图片拖到图块图层——拾取(进行填充背景)——拾取填充道路
3.讲地图保存——notepad打开——讲引入的图片的绝对路径改成相对路径(把中文改成英文)
4.图层——添加对象层(rode名字)
5.插入对象(将路按顺序点出来)

新建的地图用notepad打开
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" width="14" height="6" tilewidth="46" tileheight="54">
 <tileset firstgid="1" name="bk1" tilewidth="46" tileheight="54">
  <image source="bk1.jpg" width="678" height="320"/>
 </tileset>
 <layer name="block" width="14" height="6">
  <data encoding="base64" compression="zlib">
   eJwTY2BgECMDW6BhQuK4zCDEprY+YtxMyBx8GADLYgpH
  </data>
 </layer>
 <objectgroup name="road" width="14" height="6">
  <object x="22" y="80"/>
  <object x="160" y="82"/>
  <object x="161" y="244"/>
  <object x="299" y="243"/>
  <object x="298" y="82"/>
  <object x="436" y="83"/>
  <object x="436" y="246"/>
  <object x="620" y="246"/>
 </objectgroup>
</map>

加载地图

 private void loadMap() {
    map = CCTMXTiledMap.tiledMap("map.tmx");
    map.setAnchorPoint(0.5f,0.5f);
    // 因为修改了锚点 ,所以坐标也是需要修改的
    map.setPosition(map.getContentSize().width/2, map.getContentSize().height/2);
    this.addChild(map);
}

加载地图

  // 解析地图
private void parserMap() {
    roadPoits = new ArrayList<CGPoint>();
    // 解析地图(对象层里面有road)
    CCTMXObjectGroup objectGroupNamed = map.objectGroupNamed("road");
    ArrayList<HashMap<String, String>> objects = objectGroupNamed.objects;
    for (HashMap<String, String> hashMap : objects) {
        int x = Integer.parseInt(hashMap.get("x"));
        int y = Integer.parseInt(hashMap.get("y"));
        //拿到我们画的每一个点
        CGPoint cgPoint = ccp(x, y);
        //讲所有的点放到集合里面
        roadPoits.add(cgPoint);
    }
}

加载雪花

 //加载雪花
private void loadParticle() {
    system = CCParticleSnow.node();
    // 设置雪花的样式
    system.setTexture(CCTextureCache.sharedTextureCache().addImage("f.png"));
    this.addChild(system, 1);
}

加载僵尸精灵

 // 展示僵尸
private void loadZombies() {
    sprite = CCSprite.sprite("z_1_01.png");
    sprite.setPosition(roadPoits.get(0));
    sprite.setAnchorPoint(0.5f, 0); // 设置锚点在两腿之间
    sprite.setScale(0.65f);
    sprite.setFlipX(true); // 水平翻转

    map.addChild(sprite);// 通过地图去添加僵尸 // 地图随着手指移动,僵尸也会随着手指移动

    // 序列帧的播放
    ArrayList<CCSpriteFrame> frames = new ArrayList<CCSpriteFrame>();
    String format = "z_1_%02d.png";// 02d 占位符 可以表示两位的整数 如果不足两位前面用0补足
    for (int i = 1; i <= 7; i++) {
        CCSpriteFrame displayedFrame = CCSprite.sprite(
                String.format(format, i)).displayedFrame();
        frames.add(displayedFrame);
    }

    // 配置序列帧的信息 参数1 动作的名字(给程序员看的) 参数2 每一帧播放的时间 单位秒 参数3 所有用到的帧
    CCAnimation anim = CCAnimation.animation("走路", 0.2f, frames);
    CCAnimate animate = CCAnimate.action(anim);
    // 序列帧动作默认是永不停止的循环
    CCRepeatForever forever = CCRepeatForever.action(animate);
    sprite.runAction(forever);

    moveToNext();
}
int speed=40;// 僵尸的速度
public void moveToNext() {
    position++;
    if (position < roadPoits.size()) {
        CGPoint cgPoint = roadPoits.get(position);
        //计算两点的距离除以速度得到距离
        float t= CGPointUtil.distance(roadPoits.get(position-1), cgPoint)/speed;
        CCMoveTo moveTo = CCMoveTo.action(t, cgPoint);
        // 调用一个对象的某一个方法
        CCSequence ccSequence = CCSequence.actions(moveTo,
                CCCallFunc.action(this, "moveToNext"));
        sprite.runAction(ccSequence);

    } else {
        //雪停下来
        system.stopSystem();// 停止粒子系统
        sprite.stopAllActions();//停止所有动作
        //  跳舞
        dance();
        SoundEngine engine=SoundEngine.sharedEngine();
        // 1 上下文 2. 音乐资源的id  3 是否循环播放
        engine.playSound(CCDirector.theApp, R.raw.psy, true);
    }
}

让地图跟随手指的移动而移动

@Override
public boolean ccTouchesMoved(MotionEvent event) {
    map.touchMove(event, map);// 地图会随着手指的移动而移动  如果该方法生效 必须保证地图的锚点在中间位置
    return super.ccTouchesMoved(event);
}

游戏的暂停与继续

@Override
public boolean ccTouchesBegan(MotionEvent event) {
    this.onExit(); // 暂停
    this.getParent().addChild(new PauseLayer());// 让场景添加新的图层 
    return super.ccTouchesBegan(event);
}

// 专门用来暂停的图层
private class PauseLayer extends CCLayer{
    private CCSprite heart;
    public PauseLayer(){
        this.setIsTouchEnabled(true);// 打开触摸事件的开关
        heart = CCSprite.sprite("heart.png");
        // 获取屏幕的尺寸
        CGSize winSize = CCDirector.sharedDirector().getWinSize();
        heart.setPosition(winSize.width/2, winSize.height/2);// 让图片再屏幕的中间

        this.addChild(heart);
    }
    // 当点击PauseLayer的时候 
    @Override
    public boolean ccTouchesBegan(MotionEvent event) {
        CGRect boundingBox = heart.getBoundingBox();
        //  把Android坐标系中的点 转换成Cocos2d坐标系中的点 
        CGPoint convertTouchToNodeSpace = this.convertTouchToNodeSpace(event);
        if(CGRect.containsPoint(boundingBox, convertTouchToNodeSpace)){// 确实点击了心


            this.removeSelf();// 回收当前图层
            DemoLayer.this.onEnter();//游戏继续
        }

        return super.ccTouchesBegan(event);
    }
}


源码:http://download.csdn.net/detail/qq_27280457/9628545

CCF大数据与计算智能大赛-面向电信行业存量用户的智能套餐个性化匹配模型联通赛-复赛第二名-【多分类,embedding】.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值