文档章节

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

梦想游戏人
 梦想游戏人
发布于 2017/07/25 20:38
字数 446
阅读 42
收藏 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
博文 420
码字总数 119565
作品 0
成都
【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的”.pvr.ccz”,”.plist”共用的终极精灵优化及注意事项!

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

junwong
2012/03/02
683
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
106
0
给前端工程师的快速切图小技巧 (切出jpg图标或png透明图)

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

arTYards
07/17
0
0
前端必备的切图知识

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

该帐号已被查封
01/25
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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
19分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
21分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
37分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部