Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - Alfonsos1

31
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:
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".
32
Texic me habia dado este script:

/*
argument0: x1
argument1: y1
argument2: x2
argument3: y2
argument4: x3
argument5: y3
argument6: x4
argument7: y4
argument8: outline (true or false)
*/

if argument8 = true then
{
draw_line(argument0,argument1,argument2,argument3);
draw_line(argument2,argument3,argument4,argument5);
draw_line(argument4,argument5,argument6,argument7);
draw_line(argument6,argument7,argument0,argument1);
}
else
{
draw_triangle(argument0,argument1,argument2,argument3,argument4,argument5,false);
draw_triangle(argument4,argument5,argument6,argument7,argument0,argument1,false);
}


pero es solo para cuadrilateros, pense que seria fasil modificarlo para que funcione para poligonos de mas lados, pero no he sabido como.

Alguien tiene o me hace un script para drawear poligonos desde 3 hasta 8 lados pintado en en interior (que no sea solo la linia)

quiero algo asi:
draw_poligone(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8)

si se quiere representar un poligono de menos de 8 lados, los ultimos argumentos se dejan en -1

por ejemplo: un poligono de 7 lados:
draw_poligone(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,-1,-1)

por ejemplo: un poligono de 3 lados:
draw_poligone(x1,y1,x2,y2,x3,y3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1)
33
gracias, con esto bastar?
34
Tu idea esta clara Herni, aunque el efecto visual no seria muy bueno, lla que se veria cuadriculada el contorno de la sono no visible,
grasias de todos modos

Repito mi pregunta anterior:

existe alguna funcion o script para divujar poligonos "rellenados"?

por rellenados simplemente me refiero a que no drawe solo las linias sino lque tambien pinte la superficie que ocupa

por ejemplo:

draw_poligone(x1,y1,x2,y2,xn,yn,... ,relleno)

MI PROBLEMA ESTARIA DEFINITIVAMENTE SOLUCIONADO SI ENCONTRARA DICHA FUNCION O SCRIPT
35
una pena que sea lenta tu forma (mi PC no es de las mejores que digames...)

TENGO UNA DUDA: existe alguna funcion para divujar poligonos "rellenados"?

por rellenados simplemente me refiero a que no drawe solo las linias sino lque tambien pinte la superficie que ocupa

por ejemplo:

draw_poligone(x1,y1,x2,y2,xn,yn,... ,relleno)
36
observen la imagen,

en la imagen la sona negra es la que el personaje no alcanza a ver devido al muro.

Quiero hacer eso en mi juego, que la sona no visible quede negra.

mas info:
juego 2D
uso solo un objeto muro que es cuadrado
juego de vista cenital (mirado desde arriba)
la view sigue al personage siempre en el centro
37
TENFRAS QUE CREAR 5 VARIABLES, UNA PARA CADA CUADRO
38
el script que yo puse es para cartas desde el card[1,1] hasta el card[1,20] y del card[2,1] hasta el card[2,20]

barajado[] vendria a ser el Dcard[]

---------

ahora que aclaras supongo que las cartas ban desde card[1,1] hasta card[20,1] y desde card[21,2] hasta card[40,2], ?es correcto?

si lo es usa este script:

for(i=1;i<=40;i+=1)
{
Dcard[i] = choose(card[floor(random(20)+1),1],card[floor(random(20)+21)),2];
for(j=1;j<=i-1;j+=1)
{
 if(Dcard[i] = Dcard[j]) i-=1;
}
}

lo que hace este script es asignarle una carta al azar a Dcard. Luego chequea si a ninguna carta anterior se le asigno la misma carta, en casa de que si: retrosede un ciclo en el for para volver a buscar una nueva carta.
39
Me cuesta entender tu problema pero por lo del choos podrias acerlo usar uno dentro de otro y listo...

proba asi:

for(i=1;i<=40;i+=1)
{
barajado[i] = choose(1,card[floor(random(20)+1)],card[2,floor(random(20)+1))];
for(j=1;j<=i-1;j+=1)
{
 if(barajado[i] = barajado[j]) i-=1;
}
}


barajado[] seria las cartas re ordenadas
40
no se si entendi bien pero bueno:

Hay 15 posiciones, tendras qe crear una variable para cada una

por ejemplo:

Campeon
Finalista1
Finalista2
Semifinalista1
Semifinalista2
Semifinalista3
Semifinalista4
Primerronda1
Primerronda2
Primerronda3
Primerronda4
Primerronda5
Primerronda6
Primerronda7
Primerronda8

cuando empieza el juego asingale el nombre del paiz a las variables "primerronda" y deja las demas variables con un simple espasio: " ".

Luego cuando un cuadro gana, pasa a ocupar una variable "Semifinalista" y desocupa su antigua variable primer ronda

Y asi asta la final

Para drawear las vanderas en el esquema que muestras solo chequeas las variables

por ejemplo

if(Semifinalista1 = ecuador) dibujar la vandera de ecuador en la primer posicion de la fila de abajo

Y si la variable contiene un espasio que no haga nada, que deje su posicion sin vandera
41
Preguntas y respuestas / Re: Juego tipo Worms
Junio 05, 2010, 12:25:14 AM
42
Preguntas y respuestas / Re: Problema con las balas
Junio 02, 2010, 11:09:36 PM
Al momento de asignarle una direction a la vala agregale algo de azar:

direction = la direccion_normal+random(20)-10;//Varia en +-10 grados
43
No estoy seguro pero creo que cada tile tiene su propio indice.

Hay alguna funcion o manera que te devuelva el indice de un tile que hay en una cierta posicion X,Y?
44
DISCULPA LA TARDANZA RECIEN PASO NUEVAMNTE POR ESTE TEMA!

proba con esto

x=objAuto.x+lengthdir_x(67,LaDireccionDelAuto-191.5)
y=objAuto.y+lengthdir_y(67,LaDireccionDelAuto-191.5)