Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: DIBUJAR POLIGONO DE 8 LADOS O MENOS  (Leído 1667 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Alfonsos1

en: Junio 20, 2010, 05:14:20 am
Nombre del creador: Alfonsos1

Breve descripción de su función: dibuja un poligono de hasta 8 lados

Versión GM utilizada:  :GM8:

Argumentos:
Citar
x1
y1
x2
y2
x3
y3
x4
y4
x5
y5
x6
y6
x7
y7
x8
y8
en caso de querer dibujar un poligono de menos de 8 lados dejar los ultimos argumentos con un valor de -1

Codigo de script:
Código: [Seleccionar]
verx[0] = argument0;
verx[1] = argument2;
verx[2] = argument4;
verx[3] = argument6;
verx[4] = argument8;
verx[5] = argument10;
verx[6] = argument12;
verx[7] = argument14;
very[0] = argument1;
very[1] = argument3;
very[2] = argument5;
very[3] = argument7;
very[4] = argument9;
very[5] = argument11;
very[6] = argument13;
very[7] = argument15;

if(verx[0] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 0;
if(verx[1] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 1;
if(verx[2] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 2;
if(verx[3] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 3;
if(verx[4] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 4;
if(verx[5] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 5;
if(verx[6] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 6;
if(verx[7] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 7;

puntos = 8;
if(verx[7] = -1) puntos -= 1;
if(verx[6] = -1) puntos -= 1;
if(verx[5] = -1) puntos -= 1;
if(verx[4] = -1) puntos -= 1;
if(verx[3] = -1) puntos -= 1;

vasio = 0;
while(!vasio)
{
 m1 = (very[(A-1+puntos) mod puntos]-very[(A+puntos) mod puntos])/(verx[(A-1+puntos) mod puntos]-verx[(A+puntos) mod puntos]+0.0000000001);
 n1 = very[(A-1+puntos) mod puntos]-m1*verx[(A-1+puntos) mod puntos];
 if( verx[(A+1+puntos) mod puntos]*m1+n1>very[(A+1+puntos) mod puntos]) h1 = 1;
 else h1 = -1;
 
 m2 = (very[(A-1+puntos) mod puntos]-very[(A+1+puntos) mod puntos])/(verx[(A-1+puntos) mod puntos]-verx[(A+1+puntos) mod puntos]+0.0000000001);
 n2 = very[(A-1+puntos) mod puntos]-m2*verx[(A-1+puntos) mod puntos];
 if(verx[(A+puntos) mod puntos]*m2+n2>very[(A+puntos) mod puntos]) h2 = 1;
 else h2 = -1;
 
 m3 = (very[(A+puntos) mod puntos]-very[(A+1+puntos) mod puntos])/(verx[(A+puntos) mod puntos]-verx[(A+1+puntos) mod puntos]+0.0000000001);
 n3 = very[(A+puntos) mod puntos]-m3*verx[(A+puntos) mod puntos];
 if(verx[(A-1+puntos) mod puntos]*m3+n3>very[(A-1+puntos) mod puntos]) h3 = 1;
 else h3 = -1;
 
 vasio = 1;
 for(pnt=0;pnt<puntos;pnt+=1)
 {
  if(pnt != (A-1+puntos) mod puntos && pnt != (A+puntos) mod puntos && pnt != (A+1+puntos) mod puntos)
  {
   if((verx[pnt]*m1+n1)*h1>=very[pnt]*h1+0.0000001 && (verx[pnt]*m2+n2)*h2>=very[pnt]*h2+0.0000001 && (verx[pnt]*m3+n3)*h3>=very[pnt]*h3+0.0000001)
   {
    vasio = 0;
   }
  }
 }
 if(!vasio) A = (A+1+puntos) mod puntos;
}

draw_triangle(verx[(A-1+puntos) mod puntos],very[(A-1+puntos) mod puntos],verx[(A+puntos) mod puntos],very[(A+puntos) mod puntos],verx[(A+1+puntos) mod puntos],very[(A+1+puntos) mod puntos],0);

for(ind=A;ind<puntos;ind+=1)
{
 verx[ind] = verx[(ind+1) mod puntos];
 very[ind] = very[(ind+1) mod puntos];
}
verx[puntos-1]=-1;
very[puntos-1]=-1;

if(puntos>3) poligono(verx[0],very[0],verx[1],very[1],verx[2],very[2],verx[3],very[3],verx[4],very[4],verx[5],very[5],verx[6],very[6],verx[7],very[7])

Ejemplos de uso:

Poligono de 8 lados:
poligono(250,250,200,300,200,275,150,275,150,200,175,225,200,225,225,200);

Poligono de 5 lados:
poligono(200,200,250,250,300,200,300,300,200,300,-1,-1,-1,-1,-1,-1);


IMPORTANTE: devido a que el script hace uso de la recurción, el nombre del script deve ser si o si "poligono".
« última modificación: Junio 20, 2010, 05:17:38 am por Alfonsos1 »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Ciberman

  • Okupa
  • *
  • Puntos: 212
  • Mensajes: 1.221
  • Agradecido: 4 veces
  • Sexo: Masculino
  • Ciberman Games - Un pixel Marca la Diferencia
    • Ver Perfil
    • Ciberman
Respuesta #1 en: Octubre 31, 2010, 01:57:50 am
lo veo más complicado de llamar siendo más facil hacerlo manualmente con vertex (y más personalizable) claro que para quien no sabe es de mucha utilidad

Cita de: CGM 2008
CGM: Un poco mas serios, mejores Juegos.
Bienvenid@ a CGM. Recomenzamos desde cero, con un reglamento mas estricto, mejor definido y con mas ganas que nunca de hacer juegos con calidad comercial. El que avisa no es traidor: Leete las reglas si no quieres llevarte un capon makero.
Mercilessly!!
Plug-In para animaciones: http://ciberman.net/tweenline/