文档章节

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

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

 

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 35
博文 435
码字总数 123998
作品 0
成都
私信 提问
前端必备的切图知识

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

该帐号已被查封
01/25
0
0
给前端工程师的快速切图小技巧 (切出jpg图标或png透明图)

部分看了文章的设计师,来找我说怎么切图。sorry?在我的理解,这就是切图啊,但是他们所指的“切图”是,怎么把设计图制作成html页面。 这就说明,现在人们对于前端都是有误区的。认为前端是...

arTYards
07/17
0
0
精灵SpriteFrameCache 优化性能

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

梦想游戏人
2015/03/23
0
0
ps cc 2014 智能切图

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

tianyawhl
2016/02/20
3
0
论切图仔的自我修养

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

iNiL0119
2015/09/16
51
0

没有更多内容

加载失败,请刷新页面

加载更多

isEmpty和null的区别

isEmpty和null的区别: 1.一个是对象为空(IsNull),一个是值为空(IsEmpty) 2.IsNull指任务类型变量是否为空包括对象类型的变量。 IsNull函数: 功能:返回Boolean的值,指明表达是否不包...

DemonsI
3分钟前
0
0
Centos7 安装mysql与php

https://blog.csdn.net/qq_36431213/article/details/79576025 官网下载安装mysql-server 依次使用下面三个命令安装 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.r......

Yao--靠自己
12分钟前
0
0
详解如何实现一个简单的 vuex

首先我们需要知道为何要使用 vuex。父子组件通信用 prop 和自定义事件可以搞定,简单的非父子组件通信用 bus(一个空的 Vue 实例)。那么使用 vuex 就是为了解决复杂的非父子组件通信。 仅仅...

嫣然丫丫丫
17分钟前
1
0
算法——RangePartitioner实现之reservoirSample

简介 reservoir的作用是:**在不知道文件总行数的情况下,如何从文件中随机的抽取一行?**即是说如果最后发现文字档共有N行,则每一行被抽取的概率均为1/N? 我们可以:定义取出的行号为cho...

freeli
20分钟前
1
0
Python安装及netcdf数据读写

一、在CentOS7系统上安装Python3 在anaconda官网下载(http://https://www.anaconda.com/download/#linux)(Anaconda指的是一个开源的Python发行版本,是Python的包管理器和环境管理器) 下...

voole
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部