文档章节

pvr.ccz和png等大图切图工具

梦想游戏人
 梦想游戏人
发布于 2017/07/25 20:38
字数 446
阅读 199
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

此类工具搜索过一些,都不要好用,于是决定自己实现一个。

大图集拆开为小图片,由于是工具,于此效率不太重要,直接用Cocos2dx随手写了一个。

基本思想是直接读取,然后把该SpriteFrame输出为文件即可

#include "HelloWorldScene.h"
#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"
#include <iostream>
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <fstream>
#include <stdlib.h>
USING_NS_CC;
using namespace  std;
using namespace cocostudio::timeline;

Scene* HelloWorld::createScene()
{
	// 'scene' is an autorelease object
	auto scene = Scene::create();

	// 'layer' is an autorelease object
	auto layer = HelloWorld::create();

	// add layer as a child to scene
	scene->addChild(layer);

	// return the scene
	return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
	// 1. super init first
	if (!Layer::init())
	{
		return false;
	}
	vector<string> files;

	const char *TEM_WORK_FILE_NAME = "filelist.txt";
	string path = "res";

	string cmd_txt = "cmd.exe /c  DIR  " + path + "  /S /B   >   ";
	cmd_txt += TEM_WORK_FILE_NAME;

	system(cmd_txt.c_str());

	fstream f;

	f.open(TEM_WORK_FILE_NAME, ios::in);

	vector<string> _queue;

	string buf;

	while (getline(f, buf))
	{
		//	cout << buf << "       ... " << endl;
		//	cout<<buffer;
		if (buf.find(".plist") == string::npos)
		{
			continue;
		}

		string file_ = buf;
		string file_path = file_.substr(strlen("Resources\\res") + file_.find("Resources\\res") + 1, file_.size() - strlen("Resources\\res") - file_.find("Resources/res"));


		while (file_path.find("\\") != string::npos)
		{
			//	file_path.replace('\\', '/');
			file_path[file_path.find("\\")] = '/';
		}
		log(file_path.c_str());

		files.push_back(file_path);

	}
	//	this->WriteToFile();
	f.close();

	//FileUtils::getInstance()->removeFile(TEM_WORK_FILE_NAME);

	//system("pause");
	//return 0;

	//开始转换
	//	vector<string> files;
	//	//files.push_back("game_1_1.plist");
	//files.push_back("game_1_2.plist");
	//files.push_back("game_1_3.plist");
	/*files.clear();
	files.push_back("ui/awake.plist");
	files.push_back("ui/yingxiongfuben_1.plist");
	files.push_back("ui/yuanbaobiaoche.plist");
	files.push_back("ui/xingkong2.plist");
	files.push_back("ui/synthesis_equipment_4.plist");
	files.push_back("ui/updateRecommend3.plist");
	files.push_back("ui/shenmishangcheng.plist");
	*/
	for (auto & name : files)
	{
		string dir = name.substr(0, name.size() - strlen(".plist"));
		//log((FileUtils::getInstance()->getWritablePath() + "/" + dir).c_str());
		FileUtils::getInstance()->removeDirectory(FileUtils::getInstance()->getWritablePath() + "/" + dir);
		FileUtils::getInstance()->createDirectory(FileUtils::getInstance()->getWritablePath() + "/" + dir);
		SpriteFrameCache::getInstance()->addSpriteFramesWithFile(name);
		auto mapp = SpriteFrameCache::getInstance()->_spriteFrames;

		for (auto & cp : mapp)
		{
			auto sp = Sprite::createWithSpriteFrameName(cp.first.c_str());// Sprite::createWithSpriteFrameName("accomplishTitle.png");
			sp->setPosition(sp->getTextureRect().size.width / 2,   sp->getTextureRect().size.height / 2 );
			this->addChild(sp);
			if (sp->getTextureRect().size.width <= 0 || sp->getTextureRect().size.height <= 0)
			{//invalid sprite
				continue;;
			}
		
			log(("	out:" + dir + "/" + cp.first).c_str());

			auto re = RenderTexture::create(sp->getTextureRect().size.width, sp->getTextureRect().size.height);

			re->begin();
			sp->visit(Director::getInstance()->getRenderer(), Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_TEXTURE), 0);

			re->end();
			string path = dir + "/" + cp.first;

			re->saveToFile(path);
		}
		SpriteFrameCache::getInstance()->removeSpriteFramesFromFile(name);
		TextureCache::getInstance()->removeAllTextures();
		SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();
	}
	//Director::getInstance()->end();
	return true;
}

 

梦想游戏人
粉丝 44
博文 505
码字总数 200978
作品 0
成都
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
记一次失败的Perl + Nginx + FastCGI 配置过程

这两天心血来潮,不知道为什么和 Perl + Nginx + FastCGI 配置 耗上了。但是失败了,记录如下: 1)安装Nginx 1.4.3 ,我的是WINDOWS 7 系统,修改配置文件如下: location ~ .(pl|cgi|perl)?...

通吃岛-低手哥
2013/10/27
1.6K
7
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
4.1K
3
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
Linux 反汇编工具--LDasm

LDasm (Linux 反汇编工具) 是一个基于 Perl/TK 的 objdump/binutils 图形化工具,试图模仿 W32Dasm 工具的外观。可搜索相互参照,将代码从 GAS 转换成 MASM 风格代码等等。...

匿名
2013/01/22
5.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

AI复原上海民国名媛影像!1929年的小姐姐,时装精致不输现在

萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 中国最早的时装秀,是什么样的? 自修复100年前的北京影像后,微博博主@大谷Spitzer这次又用AI工具,复原了民国时期的这场「花生骚」(Fashi...

视学算法
今天
20
0
【脑电硬件】教育相关的商业可穿戴脑电设备概览

脑电是一门古老的脑成像技术,但迄今为止也依然是最具生命力的主流脑成像技术之一。这主要得益于相比其他脑成像技术,脑电设备具有便携性好,使用成本低,无创,高时间分辨率,和丰富的频率信...

好未来技术
15分钟前
19
0
米菲云仓系统开发(米菲系统)

本章阐述持续集成系统的发展历程、持续集成系统的原理,以及持续集成系统的实现过程,目的是让大家全面了解持续集成系统,更加深入的学习持续集成系统的原理,为后续章节的学习做好准备。我会...

薇fzb246724
23分钟前
39
0
传统租车服务企业,拥抱Docker,K8s,微服务之路!

走进台湾双北市的民营停车场,现在有机会看到贴有Smart2go字样的车辆停在停车场,供租用,而无论预约、取车、还车到付款,使用一站式App都能完成。这是格上汽车租赁(简称格上)从今年4月开始...

Kubernetes
今天
23
0
2020年7月Github上最热门的开源项目

7月份GitHub上最热门的开源项目排行已经出炉啦,一起来看看上榜详情吧 1 tsunami-security-scanner https://github.com/google/tsunami-security-scannerStar 5830 tsunami-security-scanne...

不卖萌的邓肯
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部