Red de conocimiento informático - Computadora portátil - ¿Cómo recorre cocos2dx los archivos en la carpeta de recursos?

¿Cómo recorre cocos2dx los archivos en la carpeta de recursos?

El primer paso es: agregar un método en ZipFile, debido a que _dataThread es privado, es mejor agregar un método get sin cambiar el código fuente tanto como sea posible

Este getAllFile puede devolver todos los directorios de archivos

std::vectorlt; std::stringgt; ZipFile::getAllFile(){

std::vectorlt; std::stringgt;

ZipFilePrivate:: FileListContainer::iterador it1;

for (it1=_dataThread-gt; fileList.begin(); it1!=_dataThread-gt; fileList.end(); it1) {

vec.push_back(it1-gt; first.c_str());

}

return vec;

}

Paso 2: use return valor de getAllFile para recorrer Aquí, el recorrido de iOS y Android se libera directamente al mismo tiempo, y las imágenes png y jpg se pueden usar para cargar recursos al mismo tiempo. p>

#include " support/zip_support/ZipUtils .h"

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

#include lt;hgt;

#include lt; sys/stat.hgt;

#else

#include "plataforma/CCCommon.h"

#include "support/ zip_support/unzip.h"

#include "jni/Java _org_cocos2dx_lib_Cocos2dxHelper.h"

#endif

void ResourceLoadingLayer::getAllFile(std::string carpetaPath , profundidad int, std::stringgt; std::stringgt ; lista, std::string head){

#if CC_PLATFORM_IOS == CC_TARGET_PLATFORM

DIR *dp;

structdirent *entry;

structstat statbuf;

if((dp =opendir(folderPath.c_str()) == NULL) {

fprintf(stderr, "no se puede abrir el directorio: s\n ", carpetaPath.c_str());

return

}

chdir(folderPath. c_str());

mientras ((entrada = readdir(dp)) ! = NULL) {

lstat(entrada-gt;d_n

ame, amp; statbuf);

if(S_ISDIR(statbuf.st_mode)) {

if(strcmp(".", entrada-gt;d_name) == 0 ||

strcmp(".", entrada-gt; d_name) == 0)

Continuar

getAllFile(entry-gt; d_name, profundidad 4, lista, encabezado entrada-gt; d_name);

} else {

if (head.length() == 0) {

nombre de cadena = entrada -gt;d_name;

if (name.length()gt;3 amp;amp; name.rfind(".") gt; 0 amp;amp; (name.substr(name.rfind( ".") 1, 3) == "jpg" || nombre.substr(nombre.rfind(".") 1, 3) == "jpg" || nombre.substr(nombre.rfind(".") 1, 3) == "jpg" || nombre.substr(nombre.rfind(".") 1, 3) == "png")) {

list-gt; gt;d_name);

}

}

} else {

cadena nombre de archivo = head "/" entrada-gt;d_name ;

if (nombre de archivo.length()gt; 3 amp; amp; nombre de archivo.rfind(".") gt; 0 amp;amp; (nombre de archivo.substr(nombre de archivo.rfind(". ") 1, 3) == "/" nombre-entrada;

if (nombre de archivo.") 1, 3) == "jpg" || nombre de archivo.substr(nombre de archivo.rfind(".") 1 ,3) == "png")) {

lista-gt; push_back(nombre de archivo

}

}

}

}

chdir("...");

closedir(dp);

#else

;

ZipFile* pFile = new ZipFile(getApkPath(), "assets/");

vectorlt; vec = pFile-gt(); int i=0; ilt; vec.size(); i ) {

archivo de cadena = vec.at(i);

if (file.compare("activos/" )) {

archivo = archivo.substr(7, archivo.longitud());

}

if (archivo.substr(0, carpetaPath. longitud()) == carpeta

Ruta ){

cadena nombre de archivo = file.substr( file.rfind("/") 1, file.length());

if (filename.length()gt; 3 amp; amp; nombre de archivo.rfind(".") gt; 0 amp;amp; (nombre de archivo.substr(nombre de archivo.rfind(".") == "jpg" || nombre de archivo.substr(nombre de archivo. rfind(".")) 1, 3) == "png") {

list-gt; push_back(nombre de archivo);

#endif

}

El tercer paso, use:

Primero, debe obtener la ruta completa de la carpeta de recursos. Hay muchas formas de hacer esto, solo un ejemplo:

Hay una imagen HelloWorld.png en el directorio raíz del recurso y podemos obtener su ruta completa directamente en el programa, es decir

string fullpath = CCFileUtils::sharedFileUtils.sharedFileUtils()-gt; fullPathForFilename("HelloWorld.png");

Entonces string resPath = fullpath.substr(0, fullpath.rfind("/ ") 1) ;

Después de obtener la ruta completa del recurso,

vectorlt; stringgt; vec;

getAllFile(resPath, 0, amp; vec, " ");

Esto será un gran éxito, el vec contendrá todos los recursos png o jpg y tendrá un nombre de archivo de encabezado Oh! Por ejemplo, bg/welcome.jpg

Lo anterior es para recorrer todas las carpetas. Si recorre un directorio solo bajo el archivo de recursos, es

getAllFile(resPath "xxx", 0, amp ;vec, ""); xxx es un subdirectorio en el directorio raíz del recurso, por lo que se puede cargar un directorio por separado