Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/07/2013, 09:30
Avatar de gilber966
gilber966
 
Fecha de Ingreso: abril-2010
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Consumo de juego HTML5

ok esto es lo q tengo en lineas generales:

una funcion q inicia los disparos en orden dispara hasta 19 balas lo que hace es poner una variable JSON en true asi: bala0{mode:false, x:0,y:0}

la funcion:

Código Javascript:
Ver original
  1. function disparar(){
  2. disparando=true;//console.log("si disparar : "+disparando);
  3.        
  4. if(bala0.mode==false){ bala0.angulo=controlAngulo* Math.PI / 180;//en rads
  5. segundoAngulo0=180-(90+controlAngulo);//angulo para dibujar la linea de la bala de 20 px roja
  6. segundoAngulo0=(180-(90+controlAngulo))* Math.PI / 180;
  7. }

esta toma el angulo del cañon para calcular el angulo de la bala, la bala es una linea, en el loop pinto hasta 19 balas SI estan en mode:true asi:

Código Javascript:
Ver original
  1. if(bala1.mode==true){//ojo aqui solo se dibuja la bala
  2. bala1f();//esta funcion hace los calculos sobre la bala
  3. mundoContexto.beginPath();
  4. mundoContexto.moveTo(bala1.X,bala1.Y);
  5. mundoContexto.lineWidth = 2;
  6. mundoContexto.strokeStyle = "red";
  7. mundoContexto.lineTo(parseInt(bala1.iniX),parseInt(bala1.iniY));
  8.  
  9.  
  10. mundoContexto.stroke();
  11.  
  12. }if(bala1.mode==false){//si la bala esta false por colision la volvemos al lugar inicial
  13. iniX=parseInt(canonData.X)+90;
  14. iniY=parseInt(canonData.Y)+53;
  15. bala1.X=String(origenBalasX);
  16. bala1.Y=String(origenBalasY);
  17. bala1.iniX="0";
  18. bala1.iniY="0";
  19. hipotenusa1=1;
  20. } //fin de la bala 1


como la anterior son 19 una por cada bala, pero noten que los calculos no se hacen aqui los hace bala1f()

esta es la funcion que realiza los calculos:


Código Javascript:
Ver original
  1. function bala1f(){
  2. if(bala1.mode==true){
  3. //ojo solo bala lineal 0 grados
  4. //primero mirar si la bala esta fuera de la pantalla
  5. if(bala1.X > extremoXbala || bala1.Y < extremoYbala){
  6. //inhabilitar la bala si esta fuera de la pantalla
  7. sacarBala(bala1,1);
  8. segundoAngulo1=0;
  9. return;
  10. }
  11.  
  12. //fin de revision si la bala esta fuera de la pantalla
  13. hipotenusa1=hipotenusa1+2;//determinar el velocidad de la bala
  14. cot=20*Math.sin(segundoAngulo1);//co del segundo angulo, atras de la bala
  15. cat=20*Math.cos(segundoAngulo1);
  16. //determinar los puntos donde termina la hipotenusa, la hi mide
  17.  
  18. co=hipotenusa1*(Math.sin(bala1.angulo));
  19. ca=hipotenusa1*(Math.cos(bala1.angulo));
  20. bala1X=parseInt(bala1.X)+ca;//posicion de la bala en x
  21. bala1Y=parseInt(bala1.Y)-co;//posicion de la bala en y
  22. bala1.X=String(bala1X);
  23. bala1.Y=String(bala1Y);
  24. bala1.iniX=String(bala1X-cot);
  25. bala1.iniY=String(bala1Y+cat);
  26. //colisiones();
  27. }

no esta implementada la colision pero es simple, cuando una bala esta fuera de la pantalla paso su modo a false, X y Y a 0, angulo a 0 y el origen a la punta del cañon, hay una funcion que actualiza la punta del cañon cada que este gira.

en fin eso es mi codigo, espero sus opiniones y les agradezco las observaciones que me puedan guiar