文档章节

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

梦想游戏人
 梦想游戏人
发布于 2017/07/25 20:38
字数 446
阅读 26
收藏 0
点赞 0
评论 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;
}

 

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 34
博文 402
码字总数 115594
作品 0
成都
【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的".pvr.ccz",".plist"共用的终极精灵优化及注意事项!

李华明Himi 原创,转载务必在明显处注明: 【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/465.html 前几节由于时间紧张,只是将一些遇到的问题拿出来进行分享经验,...

迷途d书童 ⋅ 2012/03/19 ⋅ 0

【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的”.pvr.ccz”,”.plist”共用的终极精灵优化及注意事项!

前几节由于时间紧张,只是将一些遇到的问题拿出来进行分享经验,那么今天抽空写一篇常用的精灵以及精灵常用和注意的一些知识;那么由于cocos2d教程基本很完善,那么今天Himi介绍一些注意点和...

junwong ⋅ 2012/03/02 ⋅ 0

【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的”.pvr.ccz”,”.plist”共用的终极精灵优化及注意事项!

【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的”.pvr.ccz”,”.plist”共用的终极精灵优化及注意事项!Posted: 11th 二月 2012 by Himi in iOS-Cocos2d 游戏开发系列 Tags: ...

晨曦之光 ⋅ 2012/05/28 ⋅ 0

前端必备的切图知识

不相干的前言: 希望大家编程时注意身体,别久坐否则坐骨神经、腰间盘、脊椎、眼睛、颈椎、痔疮等等各种相关的病会找上门。 本文以Adobe Photoshop CC 2018 (32 Bit)版本为例介绍,不同版本可...

该帐号已被查封 ⋅ 01/25 ⋅ 0

精灵SpriteFrameCache 优化性能

SpriteFrameCache 用pvr.ccz 或png图片集文件优化精灵 cc.SpriteFrameCache:getInstance():addSpriteFrames("11.plist") --加载plist local sp=cc.Sprite:createWithSpriteFrameName("1.jpg......

梦想游戏人 ⋅ 2015/03/23 ⋅ 0

android .9图讲解

第一部分:下面我们来看看安卓切图前辈的心得: 1、考虑适配Android 各种复杂的分辨率,如主流的1280X720, 800X480, 640X480,480X320,以及各种非主流分辨率。 2、.9神器 3、PNG24+jpg 4、可交...

青莲居士 ⋅ 2015/09/25 ⋅ 1

ps cc 2014 智能切图

ps cc 新增了智能切图,对于web 前端来说是不小的福音,大大提高切图效率,图片设计好并正确命名后切好的图片就自动保存在生成的一个assets 文件夹中 1、首先在ps 编辑> 首选项> 增效工具中选...

tianyawhl ⋅ 2016/02/20 ⋅ 0

论切图仔的自我修养

一、Photoshop Adobe Photoshop 是设计师的必备,所以也是前端切图仔的必备工具。 Photoshop CC 2015 墙裂推荐安装2015版,有诸多改进,不少新功能是与我们切图仔息息相关的。 工作区 常用快...

iNiL0119 ⋅ 2015/09/16 ⋅ 0

pngquant将 24/32-bit的PNG 图像 降色到 (8-bit) PNG图像压缩比率高达

本站文章均为 James开发街区原创,转载务必在明显处注明: 转载自【James开发街区】 原文链接: http://tech.pigsns.com/thread-84-1-1.html 今天回家的路上 群里有人说了个 图片压缩 的工具 ...

汉果James ⋅ 2014/05/08 ⋅ 0

android美化之 “点九”

一、“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显...

虫虫 ⋅ 2011/12/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

之前没接触过证书加密的话,对证书相关的这些概念真是感觉挺棘手的,因为一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,起码我个人感觉如此,且很长...

颖辉小居 ⋅ 22分钟前 ⋅ 0

利用有限制通配符提升API灵活性(28)

1、参数化类型是不可变的 List<String> 不是List<Object>的子类,但是二者是有联系的 利用有限制的通配符类型处理类似情况 List<? extends Object>(生产者) Collection<? super E>(消费者......

职业搬砖20年 ⋅ 28分钟前 ⋅ 0

ssm框架 +bootstrap分页

这里有两种方式 方式一:自己写分页 方式二:使用插件PageHelper 1.自己写分页 1.1 效果 1.2 实现过程 1.2.1 创建分页公共类 //---------------------------1.属性-------------------------...

Lucky_Me ⋅ 35分钟前 ⋅ 0

Istio-快速安装

Istio是一个服务网格(Service Mesh)软件,可以在Kubernetes中快速安装: 1、创建配置文件 helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/is......

openthings ⋅ 35分钟前 ⋅ 0

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 40分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 41分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 45分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 57分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 今天 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部