KingKill
17/08/2005, 23:44
Estoy intentando hacer un juego tipo asteroids utilizando MrMirko SDK, hasta ahora todo va bien, se deja compilar y ejecutar en la GP. PERO cuando una parte de sprite cruza el borde superior de la pantalla esta parte aparece en parte inferior de la pantalla. No se si es problema del script o de mi GP.
Aki esta el codijo por si alguin quiere provarlo en su GP.
Y he adjuntado el fxe compilado.
#include "gp32.h"
#include <math.h>
#define xmax=319;
#define ymax=239;
extern unsigned char ship[];
float xvel;
float yvel;
float acc;
float angle;
float xpos=100;
float ypos=100;
u16 *framebuffer[2];
char swapper=0;
void swap_screen () {
gp_setFramebuffer(framebuffer[swapper],1);
swapper++; if (swapper == 2) swapper=0;
}
void move_ship() {
if(gp_getButton() & BUTTON_UP){angle=0; acc=.05;
}
else if(gp_getButton() & BUTTON_RIGHT){angle=90*3.14/180; acc=.05;
}
else if(gp_getButton() & BUTTON_DOWN){angle=180*3.14/180; acc=.05;
}
else if(gp_getButton() & BUTTON_LEFT){angle=270*3.14/180; acc=.05;
}
else{acc=0;
}
xvel+=acc*sin(angle);
yvel+=acc*cos(angle);
xpos +=xvel;
ypos -=yvel;
if(xpos > 319){ xpos = 0-50;
}
else if (xpos < 0-50){xpos=319;
}
if(ypos > 239+50){ ypos = 0;
}
else if (ypos < 0){ypos=239+50;
}
if (xvel>3){xvel=3;
}
if (xvel<-3){xvel=-3;
}
if (yvel>3){yvel=3;
}
if (yvel<-3){yvel=-3;
}
}
int main() {
int framerate=0;
int refreshrate=0;
char buffer[32]="Framerate: ";
framebuffer[0] = (u16*) FRAMEBUFFER1;
framebuffer[1] = (u16*) FRAMEBUFFER2;
gp_setCpuspeed(66);
gp_initRTC();
refreshrate=gp_initFramebuffer(framebuffer[0],16,85);
gp_clearRTC();
while (1) {
move_ship();
swap_screen();
gp_clearFramebuffer16(framebuffer[swapper],0xffff);
gp_drawSpriteH ( (u16*) ship, xpos, ypos, framebuffer[swapper]);
framerate++;
if (gp_getRTC() > 63) {sprintf(buffer,"Framerate: %d,%d ",framerate,refreshrate);framerate=0;gp_clearRTC(); }
if ( gp_getButton()&BUTTON_A) gp_Reset();
}
}
Aki esta el codijo por si alguin quiere provarlo en su GP.
Y he adjuntado el fxe compilado.
#include "gp32.h"
#include <math.h>
#define xmax=319;
#define ymax=239;
extern unsigned char ship[];
float xvel;
float yvel;
float acc;
float angle;
float xpos=100;
float ypos=100;
u16 *framebuffer[2];
char swapper=0;
void swap_screen () {
gp_setFramebuffer(framebuffer[swapper],1);
swapper++; if (swapper == 2) swapper=0;
}
void move_ship() {
if(gp_getButton() & BUTTON_UP){angle=0; acc=.05;
}
else if(gp_getButton() & BUTTON_RIGHT){angle=90*3.14/180; acc=.05;
}
else if(gp_getButton() & BUTTON_DOWN){angle=180*3.14/180; acc=.05;
}
else if(gp_getButton() & BUTTON_LEFT){angle=270*3.14/180; acc=.05;
}
else{acc=0;
}
xvel+=acc*sin(angle);
yvel+=acc*cos(angle);
xpos +=xvel;
ypos -=yvel;
if(xpos > 319){ xpos = 0-50;
}
else if (xpos < 0-50){xpos=319;
}
if(ypos > 239+50){ ypos = 0;
}
else if (ypos < 0){ypos=239+50;
}
if (xvel>3){xvel=3;
}
if (xvel<-3){xvel=-3;
}
if (yvel>3){yvel=3;
}
if (yvel<-3){yvel=-3;
}
}
int main() {
int framerate=0;
int refreshrate=0;
char buffer[32]="Framerate: ";
framebuffer[0] = (u16*) FRAMEBUFFER1;
framebuffer[1] = (u16*) FRAMEBUFFER2;
gp_setCpuspeed(66);
gp_initRTC();
refreshrate=gp_initFramebuffer(framebuffer[0],16,85);
gp_clearRTC();
while (1) {
move_ship();
swap_screen();
gp_clearFramebuffer16(framebuffer[swapper],0xffff);
gp_drawSpriteH ( (u16*) ship, xpos, ypos, framebuffer[swapper]);
framerate++;
if (gp_getRTC() > 63) {sprintf(buffer,"Framerate: %d,%d ",framerate,refreshrate);framerate=0;gp_clearRTC(); }
if ( gp_getButton()&BUTTON_A) gp_Reset();
}
}