精灵随手指移动起来

效果图:

程序代码:

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }

    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();

    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.

    // add a "close" icon to exit the progress. it‘s an autorelease object
    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                        "CloseNormal.png",
                                        "CloseSelected.png",
                                        this,
                                        menu_selector(HelloWorld::menuCloseCallback));

	pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
                                origin.y + pCloseItem->getContentSize().height/2));

    // create menu, it‘s an autorelease object
    CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
    pMenu->setPosition(CCPointZero);
    this->addChild(pMenu, 1);

	setTouchEnabled(true);
	sp1 = CCSprite::create("cpp1.png");
	sp1->setScale(0.5f);
	sp1->setPosition(ccp(100, 200));
	this->addChild(sp1);

    return true;
}

//触摸移动
void HelloWorld::ccTouchMoved(CCTouch* touch, CCEvent* event)
{
	if (iscontrol)
	{
		CCPoint location = touch->getLocationInView();
		location = CCDirector::sharedDirector()->convertToGL(location);
		CCLOG("ccTouchMoved...x:%f y:%f", location.x, location.y);

		//移动时重新设置sprite坐标
		float x = location.x-deltax;
		float y = location.y-deltay;
		sp1->setPosition(ccp(x, y));
	}

}

//触摸开始点击,计算该点坐标与sprite坐标差值
bool HelloWorld::ccTouchBegan(CCTouch* touch, CCEvent* event)
{

	CCPoint pos = sp1->getPosition();
	CCPoint location = touch->getLocationInView();
	location = CCDirector::sharedDirector()->convertToGL(location);//openGL
	CCLOG("ccTouchBegan...x:%f y:%f", location.x, location.y);

	if (location.x > 0 && location.x <960 &&
		location.y >0 && location.y < 640)//触摸的矩形区域
	{
		iscontrol = true;
		//计算触摸点与sprite的坐标差值
		deltax = location.x-pos.x;
		deltay = location.y-pos.y;
	}

	return true;

}
//触摸结束
void HelloWorld::ccTouchEnded(CCTouch* touch, CCEvent* event)
{
	CCLOG("ccTouchEnded...");
	//iscontrol = false;

}

//注册触摸事件
void HelloWorld::onEnter()
{
	CCDirector* pDirector = CCDirector::sharedDirector();
	pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
	CCLayer::onEnter();
}

void HelloWorld::onExit()
{
	CCDirector* pDirector = CCDirector::sharedDirector();
	pDirector->getTouchDispatcher()->removeDelegate(this);
	CCLayer::onExit();
}

精灵随手指移动起来,布布扣,bubuko.com

时间: 2024-12-31 20:46:08

精灵随手指移动起来的相关文章

Cocos2d-x 让精灵随手指移动起来二(简单实现)

void HelloWorld::ccTouchMoved(cocos2d::CCTouch *touch, cocos2d::CCEvent *event) { CCSize winSize = CCDirector::sharedDirector()->getVisibleSize(); if (m_ship) { CCPoint pos = touch->getDelta();//获取触点当前位置与较早前的位置的差距 CCPoint currentPos = m_ship->get

Cocos2d-x 《雷电大战》-精灵随手指移动,你点哪我走哪!

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文要实现飞机游戏中,人的手指按着飞机,就能拖着飞机走动,这里实现了当你手指按在手机的图片上,手指一直按着屏幕,飞机就会跟着你走.同时,还加入了边界判断条件,让飞机在你的视野内移动,实现的效果完全和我们手机上的飞机游戏一样. 效果: Cocos2d-x版本:3.4 工程环境:VS30213 一.代码编写 1.头文件GameMain.h /** *@作者 林炳文(邮箱:[email prote

iOS_31_cocos2d_消息调度

最终效果如图: cocos2d V3 只要实现了- (void)update:(CCTime)delta方法, 就会自动调用它,无需手动调用 foreach   或者说for in遍历的时侯,不能增删成员 封装的 子弹类,继承自CCSprite // // Bullet.h // 31_cocos2D入门 // // Created by beyond on 14-9-7. // Copyright (c) 2014年 com.beyond. All rights reserved. // 子弹

Cocos2d-x《雷电大战》(3)-子弹无限发射

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文要实现雷电游戏中,游戏一開始,英雄飞机就无限发射子弹的功能. 这里的思想是单独给子弹弄一个层.在这个层不设置一个定时器,每隔一个时间,依据当前英雄飞机传入的位置,生成子弹,并设置子弹的移动事件,和移动后的事件(就是把子弹删除掉,节省内存). 终于效果: Cocos2d-x版本号:3.4 project环境:VS30213 一.英雄子弹层 1.HeroBulletLayer.h /** *

Cocos2d-x游戏《雷电大战》开源啦!要源码要资源快快来~~

写在前面的话:这是笔者开发的第二个小游戏<雷电大战>,之前就过这个游戏和<赵云要格斗>一样,最终将会开源.由于自己的一些个人原因.这个游戏还没有完成,但是许多网友都过来寻求代码或资源,本着开源的精神,笔者今天将它们共享给出大家. 注:目前游戏还没有完成,代码全是笔者原创,资源有一部分原创,有一部分网上搜集. 若是觉得本项目对你有用,那么请给辛苦的笔者的GitHub右上角Star一颗星星!不胜感激---- 下载地址 https://github.com/appleappleapple

iOS_31_cocos2d_图层CCLayer_加速计

最终效果图: cocos2d-x中,图层Layer的继承结构图: 从上面图中可以看到: 重点的几个直接子类是:Control.ScrollView.Menu.LayerColor 其中LayerColor可以让图层具有颜色 其中Control的子类,全都是与用户交互的一些类,如:button.slider等 0.CCLayer概述 一个游戏中可以有很多个场景,每个场景里面又可能包含有多个图层,这里的图层一般就是CCLayer对象. CCLayer本身几乎没什么功能,对比CCNode,CCLaye

Cocos2d-x《雷电大战》(4)-策略模式实现不同子弹切换!!

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文从设计模式中的策略模式入手,主讲了飞机大战中英雄飞机切换不同的子弹.这里分为三种子弹.第一种:每次发一个子弹,垂直发射;第二种:每次发两个子弹,两个都是垂直发射:第三种;每次发三个子弹,两边的子弹有一定的角度,而中间的子弹垂直发射;设计模式是游戏开发经常用到的思想,建议有兴趣的同学可以好好研究下!好了,下面开始吧. 效果如下: Cocos2d-x版本:3.4 工程环境:VS30213 一

Cocos2d-x《雷电大战》(5)-单例模式英雄飞机闪亮登场!

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文将实现用单例模式实现一个英雄飞机类的设计,单例模式是游戏开发中最常用到的一种设计模式,原理也比较简单,仔细研究下就可以掌握好. 来看看效果: Cocos2d-x版本:3.4 工程环境:VS30213 一.单例模式解析 单例模式也称为单件模式.单子模式,可能是使用最广泛的设计模式.其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享.有很多地方需要这样的功

iOS_31_cocos2d环境搭建

最终效果图如: 1.从Git上下载 cocos2d的压缩包,大概100M 2.解压后,进入cocos2d主目录,复制路径到终端 3.执行./install.sh开始安装(实质是拷贝至XCode目录) 安装前XCode,新建项目时界面如下 安装后XCode,新建项目时界面如下 建好的工程目录结构如下 直接运行程序,效果如下: 应用代理 // // AppDelegate.h // 31_cocos2D入门 // // Created by beyond on 14-9-5. // Copyrigh