Anuncios Google

Necesito 2 codigos [Solucionado]

Necesito 2 codigos uno para clonar varias veces un sprite y otro

para generar numeros al azar de un numero minimo a uno maximo

PD: Uso NFlib


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de kNightFox

Te has molestado en mirar el

Te has molestado en mirar el ejemplo que viene en la libreria, el de las pelotitas rebotando en la pantalla superior?
 
 

/*
-------------------------------------------------
 
	NightFox's Lib Template
	Ejemplo de carga de sprites
 
	Requiere DevkitARM R30
	Requiere NightFox's Lib
 
	Codigo por NightFox
	http://www.nightfoxandco.com
	Inicio 10 de Octubre del 2009
 
	(c) 2009 - 2010 NightFox & Co.
 
-------------------------------------------------
*/
 
 
 
 
 
/*
-------------------------------------------------
	Includes
-------------------------------------------------
*/
 
// Includes c/c++
#include <stdio.h>
#include <time.h>
 
// Includes propietarios NDS
#include <nds.h>
 
// Includes librerias propias
#include <nf_lib.h>
 
 
 
 
 
/*
-------------------------------------------------
	Main() - Bloque general del programa
-------------------------------------------------
*/
 
int main(int argc, char **argv) {
 
	// Pantalla de espera inicializando NitroFS
	NF_Set2D(0, 0);
	NF_Set2D(1, 0);	
	consoleDemoInit();
	iprintf("\n NitroFS init. Please wait.\n\n");
	iprintf(" Iniciando NitroFS,\n por favor, espere.\n\n");
	swiWaitForVBlank();
 
	// Define el ROOT e inicializa el sistema de archivos
	NF_SetRootFolder("NITROFS");	// Define la carpeta ROOT para usar NITROFS
 
	// Inicializa el motor 2D
	NF_Set2D(0, 0);				// Modo 2D_0 en ambas pantallas
	NF_Set2D(1, 0);
 
	// Inicializa los fondos tileados
	NF_InitTiledBgBuffers();	// Inicializa los buffers para almacenar fondos
	NF_InitTiledBgSys(0);		// Inicializa los fondos Tileados para la pantalla superior
	NF_InitTiledBgSys(1);		// Iniciliaza los fondos Tileados para la pantalla inferior
 
	// Inicializa los Sprites
	NF_InitSpriteBuffers();		// Inicializa los buffers para almacenar sprites y paletas
	NF_InitSpriteSys(0);		// Inicializa los sprites para la pantalla superior
	NF_InitSpriteSys(1);		// Inicializa los sprites para la pantalla inferior
 
	// Carga los archivos de fondo desde la FAT/EFS a la RAM
	NF_LoadTiledBg("bg/nfl", "nfl", 256, 256);			// Carga el fondo para la pantalla superior
	NF_LoadTiledBg("bg/bg3", "capa_3", 256, 256);		// Carga el fondo para la capa 3, pantalla inferior
	NF_LoadTiledBg("bg/bg2", "capa_2", 1024, 256);		// Carga el fondo para la capa 2, pantalla inferior
 
 
	// Carga los archivos de sprites desde la FAT/EFS a la RAM
	NF_LoadSpriteGfx("sprite/personaje", 0, 64, 64);	// Personaje
	NF_LoadSpritePal("sprite/personaje", 0);
 
	NF_LoadSpriteGfx("sprite/bola", 1, 32, 32);			// Bola azul
	NF_LoadSpritePal("sprite/bola", 1);
 
 
	// Crea los fondos de la pantalla superior
	NF_CreateTiledBg(0, 3, "nfl");
	// Crea los fondos de la pantalla inferior
	NF_CreateTiledBg(1, 3, "capa_3");
	NF_CreateTiledBg(1, 2, "capa_2");
 
 
	// Transfiere a la VRAM los sprites necesarios
	NF_VramSpriteGfx(1, 0, 0, true);	// Bola, manten los frames adicionales en RAM
	NF_VramSpritePal(1, 0, 0);
 
	NF_VramSpriteGfx(0, 1, 0, false);	// Personaje, copia todos los frames a la VRAM
	NF_VramSpritePal(0, 1, 0);
 
 
	// Variables generales y inicializacion del random
	u8 n = 0;
	srand(time(NULL));
 
	// Crea el sprite del personaje en pantalla
	s16 pj_x = 0;
	s16 pj_y = 127;
	u8 pj_frame = 0;
	u8 pj_anim = 0;
	s8 pj_speed = 1;
	NF_CreateSprite(1, 0, 0, 0, pj_x, pj_y);
 
	// Crea las bolas en la pantalla superior
	s16 bola_x[32];
	s16 bola_y[32];
	s8 bola_spx[32];
	s8 bola_spy[32];
	for (n = 0; n < 32; n ++) {
		bola_x[n] = (rand() % 223);
		bola_y[n] = (rand() % 159);
		bola_spx[n] = (rand() % 3) + 1;
		bola_spy[n] = (rand() % 3) + 1;
		NF_CreateSprite(0, n, 0, 0, bola_x[n], bola_y[n]);
	}
 
 
	// Bucle (repite para siempre)
	while(1) {
 
		// Mueve el personaje
		pj_x += pj_speed;
		if ((pj_x < 0) || (pj_x > 191)) {
			pj_speed *= -1;
			if (pj_speed > 0) {
				NF_HflipSprite(1, 0, false);
			} else {
				NF_HflipSprite(1, 0, true);
			}
		}
		NF_MoveSprite(1, 0, pj_x, pj_y);
 
		// Animacion del personaje
		pj_anim ++;
		if (pj_anim > 5) {
			pj_anim = 0;
			pj_frame ++;
			if (pj_frame > 11) pj_frame = 0;
			NF_SpriteFrame(1, 0, pj_frame);
		}
 
		// Mueve las bolas
		for (n = 0; n < 32; n ++) {
			bola_x[n] += bola_spx[n];
			if ((bola_x[n] < 0) || (bola_x[n] > 223)) bola_spx[n] *= -1;
			bola_y[n] += bola_spy[n];
			if ((bola_y[n] < 0) || (bola_y[n] > 159)) bola_spy[n] *= -1;
			NF_MoveSprite(0, n, bola_x[n], bola_y[n]);
		}
 
		// Actualiza el array de OAM
		NF_SpriteOamSet(0);
		NF_SpriteOamSet(1);
 
		swiWaitForVBlank();		// Espera al sincronismo vertical
 
		// Actualiza el OAM
		oamUpdate(&oamMain);
		oamUpdate(&oamSub);
 
	}
 
	return 0; 
 
}
 
 
Ahi tienes 32 Sprites clonados rebotando


Nuestra web oficial:
http://www.nightfoxandco.com/
 
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
 
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.

 

Imagen de Disgepia

Para clonar sprites:

puedes usar un ciclo for

for (i = 0; i < 16; i++) {
    PA_CreateSprite(0, i,(void*)chico_Sprite, OBJ_SIZE_32X32,1, 0,50,80);
}

Salu2


Imagen de thimenesup

Errores

Errores al compilar

error expexted uncualified-id before "while"

error expexted uncualified-id before "return"

error expexted uncualified-id before "}" token

while(1){
	scanKeys();
	if(keysHeld() & KEY_A){
		//int randMinMax(int 1, int 6){
        srand(time(NULL));
        int result;
        while(result < 1){
                result = rand() % 6; 
        }
        return result;
}
	}
	swiWaitForVBlank();
}
        // Bucle (repite para siempre)
	while(1) {
		swiWaitForVBlank();//Espero al sincronismo vertical
	}
 
	return 0; 
 
}

Nooo, eso es un horror. xD El

Nooo, eso es un horror. xD

El srand se pone al principio del programa, y solo se llama una vez en todo el programa.

 

#include <time.h>
#include <stdlib.h>
 
void init_rand(void)
{
     srand(time(NULL));
}
 
int rand_min_max(int min, int max)
{
     return ( (rand()%(max-min)) + min );
}
 
int rand_min_max_2(int min, int max)
{
     return ( (rand()%(max-min+1)) + min );
}

La primera función se llama al empezar el programa, la segunda se llama para generar numeros entre min y max (sin incluir a max) y la tercera es como la segunda solo que también incluye a max.

Imagen de thimenesup

Me podrias

me podrias darme un ejemplo?

o darme el codigo ya  hecho para que genere un numero del 1 al 6?

 

Imagen de Anabol

Una preguntilla...

¿Sabes usar funciones? Es decir, crearlas y llamarlas.

Salu2tS!

//aqui copias el codigo que

//aqui copias el codigo que he puesto antes
 
int main(...)
{
     init_rand();
     ...
     while(1)
     {
          ...
          int numero = rand_min_max_2(1,6);
          ...
     }
}

Imagen de thimenesup

Cambiada

Cambiada la Pregunta Del tema

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.