Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* Sponsor

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!.

Mensajes recientes

11
Preguntas y respuestas / Lasers Animados [Solucionado]
« Último mensaje por Jeffrey Faper en Enero 11, 2022, 03:44:02 am »
Estaba replicando algunos lasers de mis shoot em up favoritos , todo marchaba bien , hasta que intente replicar el laser  beam tipo consolador del juego Dogyuun,  el laser funciona adecuadamente, el unico problema fue que al colisionar el laser contra enemigos la punta del laser terminaba desapareciendo asi que decidi dibujar todo manual mente paso por paso osea con un monton de if,  aqui les dejo el codigo del laser y el projecto por si quieren echarle un vistazo  tal vez usted  encuentre la solucion
laser animado projecto:
https://drive.google.com/file/d/1rB6IaLmGn__ApLcYIS_IzXErFB4AcQF5/view?usp=sharing

//LASER STEP EVENT
///STANDARD LASER TEST
var laserTrim = keyboard_check_pressed(ord("W"));

      frame += 0.3;
     
   if(laserTrim){
      laserEnd = 1;
      laserLength = maxLength/choose(1,2,3);
      }
   //INIT LASER BEAM
   if(image_xscale>0.1) && (!laserEnd)
   {  x = pShip.x;
      y = pShip.y;
      depth += 0.05;
      image_xscale -= 0.0125;  
     if(maxLength<512){maxLength +=32;}
     for(i=0; i<maxLength; i++)
     {   xEnd = x+lengthdir_x(i,90);
         yEnd = y+lengthdir_y(i,90);
         laserLength = i;
      if(collision_point(xEnd,yEnd,parEn,0,0)) && (parEn.canStopLaser){
         break;
         }
     }
   }
   //LASER END
   if(image_xscale<=0.1) || (laserEnd){
      speed = laserSpeed;
      image_xscale -= 0.0025;
   }
   //ENEMIES TAKE DAMAGE
   if(instance_exists(parEn))
   {var hitting = ds_list_create();
        hitting = collisionLineList(x,y,xEnd,yEnd,parEn,1,0);      
     if(hitting>0)
     {for(var i=0; i<ds_list_size(hitting); i++;)
       {var inst = ds_list_find_value(hitting,i);
         if(inst.hitPoints!=0){
            with(inst){
                 hitPoints--;
                 crashFX++;
                 }
            }
       }
       ds_list_destroy(hitting);
     }
   }
   //DESTROY LASER INSTANCE
   if(image_xscale<=0){
      instance_destroy();
      }
   if(y<=view_yview-sprite_height){
      instance_destroy();
      }
//DRAW EVENT
for(i=0; i<laserLength/32; i++){
    draw_sprite(sprite5,frame,x,y-i*32);  //cuerpo del laser
}   draw_sprite(sprite4,frame,x,y-laserLength);  //cabeza del lasaer
    draw_sprite_ext(sprite4,frame,x,y,1,-1,0,c_white,1);  //colita del laser

12
Juegos completos / Pirate Alliance!
« Último mensaje por Marth en Enero 08, 2022, 01:18:21 pm »


Pirate Alliance!


Estrategia


GM: Studio2

Tiamat, el dios cuyo dominio son los 7 mares, ha convertido las aguas en un infierno. Con su ejército de marines angelicales, ha hecho que viajar por el mar sea un suicidio. Para detener a Tiamat, comandarás a la Alianza de los Señores del Mar para luchar contra Tiamat y sus marines angelicales.

¡Esto es una Alianza Pirata!





https://producciones-marte.itch.io/pirate-alliance


Enlace a Game Jolt:
https://gamejolt.com/games/piratealliance/439493

13
Preguntas y respuestas / Versión 2.2.5 exportar a Nintendo switch?
« Último mensaje por Ikaro3d en Enero 06, 2022, 08:11:52 pm »
Hola comunidad ,pues esa es mi pregunta si tengo la  Versión 2.2.5 puedo  exportar a Nintendo switch? Es que al pasar mi juego a la última versión me da error , es decir si me cogiera la mensualidad entrerprise  que incluye exportaciones a consola ,podría hacerlo con na versión 2.2.5?
14
General / Re: Joystick táctiles para juegos html5 en proceso.
« Último mensaje por dixon en Enero 05, 2022, 11:49:08 pm »
Hola, saludos, espero que esten muy bien.


Bueno, hoy les traigo una nueva actualización del script para los botones táctiles en juegos html5, ahora los botones tendrán una mejor imagen  “se ven geniales” XD, tambien se le ha corregido un error pero lamentablemente aun presenta otro error grave donde se quedan pegadas las teclas.

El nuevo código es este:

Código: [Seleccionar]

<div id="contenedorFlecha">
<div class="botones" id="botonLeft" onmousedown='funcionBoton(37,"pulsar")' onmouseup='funcionBoton(37,"soltar")' onmouseleave='funcionBoton(37,"soltar")'></div>
<div class="botones" id="botonUp" onmousedown='funcionBoton(38,"pulsar")' onmouseup='funcionBoton(38,"soltar")' onmouseleave='funcionBoton(38,"soltar")'></div>
<div class="botones" id="botonRight" onmousedown='funcionBoton(39,"pulsar")' onmouseup='funcionBoton(39,"soltar")' onmouseleave='funcionBoton(39,"soltar")'></div>
<div class="botones" id="botonDown" onmousedown='funcionBoton(40,"pulsar")' onmouseup='funcionBoton(40,"soltar")' onmouseleave='funcionBoton(40,"soltar")'></div>
</div>
<div id="contenedorBotones">
<div class="botones" id="botonA" onmousedown='funcionBoton(65,"pulsar")' onmouseup='funcionBoton(65,"soltar")' onmouseleave='funcionBoton(65,"soltar")'></div>
<div class="botones" id="botonW" onmousedown='funcionBoton(87,"pulsar")' onmouseup='funcionBoton(87,"soltar")' onmouseleave='funcionBoton(87,"soltar")'></div>
<div class="botones" id="botonS" onmousedown='funcionBoton(83,"pulsar")' onmouseup='funcionBoton(83,"soltar")' onmouseleave='funcionBoton(83,"soltar")'></div>
<div class="botones" id="botonD" onmousedown='funcionBoton(68,"pulsar")' onmouseup='funcionBoton(68,"soltar")' onmouseleave='funcionBoton(68,"soltar")'></div>
</div>

<div id="botonEnter" onmousedown='funcionBoton(13,"pulsar")' onmouseup='funcionBoton(13,"soltar")' onmouseleave='funcionBoton(13,"soltar")'></div>
<div id="botonScreen" onmousedown="toggleFullScreen()"></div>
<div id="botonReiniciar" onmousedown='funcionBoton(113,"pulsar")' onmouseup='funcionBoton(113,"soltar")' onmouseleave='funcionBoton(113,"soltar")'></div>


<style>
body{
text-align: center;
background: black;
}

#botonEnter,#botonScreen, #botonReiniciar{
background: brown;
background: transparent;
border: 1px solid red;
color: red;
width: 30px;
height:24px;
position: absolute;
left: 5vw;
}

#botonScreen{
top: 10px;
}

#botonReiniciar{
top: 55px;
}

#botonEnter{
top: 100px;
width: 60px;
}

canvas{
background: transparent;
border: 1px solid white;

width: 40vw;
max-height: 90vh;
position: absolute;
top: 5vh;
left: 30vw;
}

#contenedorFlecha{
background: navy;
background: transparent;
width: 20vw;
height: 35vh;
position: absolute;
bottom: 5vh;
left: 4vw;
}

#contenedorBotones{
background: navy;
background: transparent;
width: 20vw;
height: 35vh;
position: absolute;
bottom: 5vh;
right: 4vw;
}

.botones{
width: 30%;
height: 30%;
position: absolute;
}


#botonUp, #botonW{
background: brown;
background: transparent;
border: 1px solid white;
top: 0px;
left: 35%;
}

#botonLeft, #botonA{
background: green;
background: transparent;
border: 1px solid white;
bottom: 35%;
left: 0%;
}

#botonRight, #botonD{
background: purple;
background: transparent;
border: 1px solid white;
bottom: 35%;
right: 0px;
}

#botonDown, #botonS{
background: blue;
background: transparent;
border: 1px solid white;
bottom: 0%;
left: 35%;
}

@media (orientation: portrait) {

#botonEnter,#botonScreen, #botonReiniciar{
left: 40vw;
}

#botonScreen{
top: 70vh;
left: 5vw;
}

#botonReiniciar{
top: 70vh;
right: 5vw;
left: auto;
}

#botonEnter{
top: 70vh;
left: calc(50vw-30px);
}


canvas{
width: 90vw;
top: 2vh;
left: 5vw;
}

#contenedorBotones{
width: 38vw;
height: 20vh;
}

#contenedorFlecha{
width: 38vw;
height: 20vh;
}

}



#botonRight{
background-image: url("imagenes/botonRight_up.png");
}
#botonRight:active{
background-image: url("imagenes/botonRight_down.png");
}
#botonUp{
background-image: url("imagenes/botonUp_up.png");
}
#botonUp:active{
background-image: url("imagenes/botonUp_down.png");
}
#botonLeft{
background-image: url("imagenes/botonLeft_up.png");
}
#botonLeft:active{
background-image: url("imagenes/botonLeft_down.png");
}
#botonDown{
background-image: url("imagenes/botonDown_up.png");
}
#botonDown:active{
background-image: url("imagenes/botonDown_down.png");
}

#botonA{
background-image: url("imagenes/botonA_up.png");
}
#botonA:active{
background-image: url("imagenes/botonA_down.png");
}
#botonW{
background-image: url("imagenes/botonW_up.png");
}
#botonW:active{
background-image: url("imagenes/botonW_down.png");
}
#botonD{
background-image: url("imagenes/botonD_up.png");
}
#botonD:active{
background-image: url("imagenes/botonD_down.png");
}
#botonS{
background-image: url("imagenes/botonS_up.png");
}
#botonS:active{
background-image: url("imagenes/botonS_down.png");
}



#botonEnter{
background-image: url("imagenes/botonEnter_up.png");
}
#botonEnter:active{
background-image: url("imagenes/botonEnter_down.png");
}

#botonReiniciar{
background-image: url("imagenes/botonReiniciar_up.png");
}
#botonReiniciar:active{
background-image: url("imagenes/botonReiniciar_down.png");
}

#botonScreen{
background-image: url("imagenes/botonScreen_up.png");
}
#botonScreen:active{
background-image: url("imagenes/botonScreen_down.png");
}



#botonRight, #botonLeft, #botonUp, #botonDown, #botonA, #botonW, #botonD, #botonS, #botonEnter, #botonReiniciar, #botonScreen{
border: 0px;
background-size: 100% 100%;
}


</style>



<!-- Código JavaScript-->

<script>

/////////////////Funcion de botones
////////////////SIMULANDO TECLADO
////////////////////////////////////////////////////////////////////////////////
function funcionBoton(codigoBoton, accionBoton){
    //alert(codigoBoton);
var eventObj_izquierda = document.createEventObject ?
    document.createEventObject() : document.createEvent("Events");
eventObj_izquierda.keyCode = codigoBoton;
eventObj_izquierda.which = codigoBoton;
eventObj_izquierda.key=' ';
eventObj_izquierda.code='Space';
if(accionBoton == "pulsar")
{
if(eventObj_izquierda.initEvent){eventObj_izquierda.initEvent("keydown", true, true)}
document.dispatchEvent ? document.dispatchEvent(eventObj_izquierda) : document.fireEvent("onkeydown", eventObj_izquierda);
}
if(accionBoton == "soltar")
{
if(eventObj_izquierda.initEvent){eventObj_izquierda.initEvent("keyup", true, true)}
document.dispatchEvent ? document.dispatchEvent(eventObj_izquierda) : document.fireEvent("onkeyup", eventObj_izquierda);
}
}
//////////////////////////////////////////////////////////////////////////////////


///////////////FUNCION PANTALLA COMPLETA
////////////////////////////////////////////////////////////////////////////////
function toggleFullScreen() {
  if ((document.fullScreenElement && document.fullScreenElement !== null) ||   
    (!document.mozFullScreen && !document.webkitIsFullScreen)) {
    if (document.documentElement.requestFullScreen) {
    document.documentElement.requestFullScreen();
    } else if (document.documentElement.mozRequestFullScreen) {
document.documentElement.mozRequestFullScreen();
} else if (document.documentElement.webkitRequestFullScreen) {
document.documentElement.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
}
} else {
if (document.cancelFullScreen) {
document.cancelFullScreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}}}
/////////////////////////////////////////////////////////////////////////////////


/////////////Funcion para pantallas tactiles
//////////////////////////////////////////////////////////////////////////////////
//Detectando si existe pantalla tactil.
var touchDevice = ('ontouchstart' in document.documentElement);
var botonesId = ["botonLeft","botonUp","botonRight","botonDown","botonA","botonW","botonS","botonD","reiniciar","botonEnter"];
var botonesCodigos = [37,38,39,40,65,87,83,68,113,13];
    var botonId = "";
    var botonCodigo = 0;
    var numeroArray =[];
   
if(touchDevice == true)
{

//Analizando todos los botones contenidos en el array
//Recorriendo el array que contiene los nombres de los botones.

        numeroX=0;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[0],"pulsar");funcionBoton(botonesCodigos[2],"soltar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[0],"soltar");}, false);


        numeroX=1;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[1],"pulsar");funcionBoton(botonesCodigos[3],"soltar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[1],"soltar");}, false);

        numeroX=2;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[2],"pulsar");funcionBoton(botonesCodigos[0],"soltar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[2],"soltar");}, false);

    numeroX=3;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[3],"pulsar");funcionBoton(botonesCodigos[1],"soltar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[3],"soltar");}, false);

    numeroX=4;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[4],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[4],"soltar");}, false);

    numeroX=5;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[5],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[5],"soltar");}, false);


    numeroX=6;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[6],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[6],"soltar");}, false);

    numeroX=7;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[7],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[7],"soltar");}, false);


    numeroX=8;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[8],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[8],"soltar");}, false);

    numeroX=9;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[9],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[9],"soltar");}, false);
}
///////////////////////////////////////////////////////////////////////////////////////



</script>

El proceso para integrar los botones a tu juego “HTML5” es el siguiente:
1.   Crea tu juego html5 empleando las teclas del teclado:
Vk_left (código ascii 37);
Vk_up (código ascii 38);
Vk_rigth (código ascii 39);
 Vk_down (código ascii 40);
A (código ascii 65);
W (código ascii 87);
D (código ascii 68);
S (código ascii 83);
Enter (código ascii 13);
F12: para reiniciar el juego. (código ascii 113);

2.   Exporta tu juego html5.
3.   Copia el código para botones táctiles de este post.
4.   Abre con el block de notas el index.html  de tu juego.
5.   Pega el código al final del archivo justo por encima de la etiqueta de cierre </body> como se indica aquí abajo:



6. Descarga el paquete de imágenes de los botones “aquí”;
7.Crea una carpeta llamada imágenes la cual debe encontrarse en la misma carpeta de tu juego como se indica en la imagen:


8. En esa carpeta deberás pegar las imágenes que descargastes para que te quede algo como esto:


9. Listo eso es todo.

Si quieres ver cómo quedó el diseño puedes  acceder al juego “30pepas”.



Listo eso es todo, seguimos programando, nos vemos luego.


15
Desarrollo de Scripts / smoovla
« Último mensaje por smoovla en Enero 05, 2022, 06:26:54 am »
blackpink jennie, one in all the stylish icons, has seen a sequence of alexander wang outfits on ig before and has triggered lots of echoes. this difficulty is wearing mild monster sunglasses to "burn" anyone! in this promotional photo, now not best jennie is wearing a photo, however additionally the canine at home is dispatched to help "deliver the products". it's so adorable~
escorts
16
General / Re: Joystick táctiles para juegos html5 en proceso.
« Último mensaje por dixon en Enero 04, 2022, 08:49:48 am »
Hola, saludos a todos espero que estén bien.


Aquí les traigo una nueva actualización del script que dota a los juegos html5 de botones táctiles permitiendo que los juegos puedan ser jugados desde cualquier plataforma. Ahora la implementación es muy fácil solo tendrán que copiar y pegar.

El código es el siguiente:
Código: [Seleccionar]

<div id="contenedorFlecha">
<div class="botones" id="botonLeft" onmousedown='funcionBoton(37,"pulsar")' onmouseup='funcionBoton(37,"soltar")' onmouseleave='funcionBoton(37,"soltar")'><</div>
<div class="botones" id="botonUp" onmousedown='funcionBoton(38,"pulsar")' onmouseup='funcionBoton(38,"soltar")' onmouseleave='funcionBoton(38,"soltar")'>^</div>
<div class="botones" id="botonRight" onmousedown='funcionBoton(39,"pulsar")' onmouseup='funcionBoton(39,"soltar")' onmouseleave='funcionBoton(39,"soltar")'>></div>
<div class="botones" id="botonDown" onmousedown='funcionBoton(40,"pulsar")' onmouseup='funcionBoton(40,"soltar")' onmouseleave='funcionBoton(40,"soltar")'>\/</div>
</div>
<div id="contenedorBotones">
<div class="botones" id="botonA" onmousedown='funcionBoton(65,"pulsar")' onmouseup='funcionBoton(65,"soltar")' onmouseleave='funcionBoton(65,"soltar")'>A</div>
<div class="botones" id="botonW" onmousedown='funcionBoton(87,"pulsar")' onmouseup='funcionBoton(87,"soltar")' onmouseleave='funcionBoton(87,"soltar")'>W</div>
<div class="botones" id="botonS" onmousedown='funcionBoton(83,"pulsar")' onmouseup='funcionBoton(83,"soltar")' onmouseleave='funcionBoton(83,"soltar")'>S</div>
<div class="botones" id="botonD" onmousedown='funcionBoton(68,"pulsar")' onmouseup='funcionBoton(68,"soltar")' onmouseleave='funcionBoton(68,"soltar")'>D</div>
</div>


<div id="botonEnter" onmousedown='funcionBoton(13,"pulsar")' onmouseup='funcionBoton(13,"soltar")' onmouseleave='funcionBoton(13,"soltar")'>Enter</div>
<div id="screen" onmousedown="toggleFullScreen()">Screen</div>
<div id="reiniciar" onmousedown='funcionBoton(113,"pulsar")' onmouseup='funcionBoton(113,"soltar")' onmouseleave='funcionBoton(113,"soltar")'>Restart</div>


<style>
body{
text-align: center;
background: black;
}

#botonEnter,#screen, #reiniciar{
background: brown;
background: transparent;
border: 1px solid red;
color: red;
width: 60px;
height:24px;
position: absolute;
left: 5vw;
}

#screen{
top: 10px;
}

#reiniciar{
top: 55px;
}

#botonEnter{
top: 100px;
}

canvas{
background: transparent;
border: 1px solid white;

width: 40vw;
max-height: 90vh;
position: absolute;
top: 5vh;
left: 30vw;
}

#contenedorFlecha{
background: navy;
background: transparent;
width: 20vw;
height: 35vh;
position: absolute;
bottom: 5vh;
left: 4vw;
}

#contenedorBotones{
background: navy;
background: transparent;
width: 20vw;
height: 35vh;
position: absolute;
bottom: 5vh;
right: 4vw;
}

.botones{
width: 30%;
height: 30%;
position: absolute;
}

#botonUp, #botonW{
background: brown;
background: transparent;
border: 1px solid white;
top: 0px;
left: 35%;
}

#botonLeft, #botonA{
background: green;
background: transparent;
border: 1px solid white;
bottom: 35%;
left: 0%;
}

#botonRight, #botonD{
background: purple;
background: transparent;
border: 1px solid white;
bottom: 35%;
right: 0px;
}

#botonDown, #botonS{
background: blue;
background: transparent;
border: 1px solid white;
bottom: 0%;
left: 35%;
}

@media (orientation: portrait) {

#botonEnter,#screen, #reiniciar{
left: 40vw;
}

#screen{
top: 70vh;
left: 5vw;
}

#reiniciar{
top: 70vh;
right: 5vw;
left: auto;
}

#botonEnter{
top: 70vh;
left: calc(50vw-30px);
}


canvas{
width: 90vw;
top: 2vh;
left: 5vw;
}

#contenedorBotones{
width: 38vw;
height: 20vh;
}

#contenedorFlecha{
width: 38vw;
height: 20vh;
}

}


</style>



<!-- Código JavaScript-->

<script>

/////////////////Funcion de botones
////////////////SIMULANDO TECLADO
////////////////////////////////////////////////////////////////////////////////
function funcionBoton(codigoBoton, accionBoton){
    //alert(codigoBoton);
var eventObj_izquierda = document.createEventObject ?
    document.createEventObject() : document.createEvent("Events");
eventObj_izquierda.keyCode = codigoBoton;
eventObj_izquierda.which = codigoBoton;
eventObj_izquierda.key=' ';
eventObj_izquierda.code='Space';
if(accionBoton == "pulsar")
{
if(eventObj_izquierda.initEvent){eventObj_izquierda.initEvent("keydown", true, true)}
document.dispatchEvent ? document.dispatchEvent(eventObj_izquierda) : document.fireEvent("onkeydown", eventObj_izquierda);
}
if(accionBoton == "soltar")
{
if(eventObj_izquierda.initEvent){eventObj_izquierda.initEvent("keyup", true, true)}
document.dispatchEvent ? document.dispatchEvent(eventObj_izquierda) : document.fireEvent("onkeyup", eventObj_izquierda);
}
}
//////////////////////////////////////////////////////////////////////////////////


///////////////FUNCION PANTALLA COMPLETA
////////////////////////////////////////////////////////////////////////////////
function toggleFullScreen() {
  if ((document.fullScreenElement && document.fullScreenElement !== null) ||   
    (!document.mozFullScreen && !document.webkitIsFullScreen)) {
    if (document.documentElement.requestFullScreen) { 
    document.documentElement.requestFullScreen(); 
    } else if (document.documentElement.mozRequestFullScreen) { 
document.documentElement.mozRequestFullScreen(); 
} else if (document.documentElement.webkitRequestFullScreen) { 
document.documentElement.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); 

} else { 
if (document.cancelFullScreen) { 
document.cancelFullScreen(); 
} else if (document.mozCancelFullScreen) { 
document.mozCancelFullScreen(); 
} else if (document.webkitCancelFullScreen) { 
document.webkitCancelFullScreen(); 
}}}
/////////////////////////////////////////////////////////////////////////////////


/////////////Funcion para pantallas tactiles
//////////////////////////////////////////////////////////////////////////////////
//Detectando si existe pantalla tactil.
var touchDevice = ('ontouchstart' in document.documentElement);
var botonesId = ["botonLeft","botonUp","botonRight","botonDown","botonA","botonW","botonS","botonD","reiniciar","botonEnter"];
var botonesCodigos = [37,38,39,40,65,87,83,68,113,13];
    var botonId = "";
    var botonCodigo = 0;
    var numeroArray =[];
   
if(touchDevice == true)
{

//Analizando todos los botones contenidos en el array
//Recorriendo el array que contiene los nombres de los botones.

        numeroX=0;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[0],"pulsar");funcionBoton(botonesCodigos[2],"soltar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[0],"soltar");}, false);


        numeroX=1;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[1],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[1],"soltar");}, false);

        numeroX=2;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[2],"pulsar");funcionBoton(botonesCodigos[0],"soltar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[2],"soltar");}, false);

    numeroX=3;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[3],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[3],"soltar");}, false);

    numeroX=4;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[4],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[4],"soltar");}, false);

    numeroX=5;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[5],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[5],"soltar");}, false);


    numeroX=6;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[6],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[6],"soltar");}, false);

    numeroX=7;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[7],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[7],"soltar");}, false);


    numeroX=8;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[8],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[8],"soltar");}, false);

    numeroX=9;
botonId = botonesId[numeroX];
var elementoTouch= document.getElementById(botonId);
elementoTouch.addEventListener('touchstart', function(event){
//Comprobamos si hay varios eventos del mismo tipo
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// con esto solo se procesa UN evento touch
funcionBoton(botonesCodigos[9],"pulsar");}}, false);
elementoTouch.addEventListener('touchend', function(event){
funcionBoton(botonesCodigos[9],"soltar");}, false);
}
///////////////////////////////////////////////////////////////////////////////////////



</script>



Este es un código que combina html, css y javascript y para implementarlo en sus juegos html5 tendrán que seguir estos sencillos pasos:

1.   Crea tu juego html5 empleando las siguientes teclas del teclado:
Vk_left (código ascii 37);
Vk_up (código ascii 38);
Vk_rigth (código ascii 39);
 Vk_down (código ascii 40);
A (código ascii 65);
W (código ascii 87);
D (código ascii 68);
S (código ascii 83);
Enter (código ascii 13);
F12: para reiniciar el juego. (código ascii 113);

2.   Exporta tu juego html5.
3.   Copia el código para botones táctiles de este post.
4.   Abre con el block de notas el index.html  de tu juego.
5.   Pega el código al final del archivo justo por encima de la etiqueta de cierre </body> como se indica aquí abajo:

6.   Listo.


Dudas y preguntas aquí.
Pueden ver este código funcionando  en el juego “30pepas” publicado recientemente.

Tengo planeado mejorar el código y darle una mejor apariencia a los botones, ya le he encontrado varios errores pero si Dios quiere pronto serán corregidos.
17
Juegos completos / 30pepas 😅
« Último mensaje por dixon en Enero 04, 2022, 08:16:10 am »
18
Preguntas y respuestas / Re: utilizar función clamp en camara ( SOLUCIONADO )
« Último mensaje por Ikaro3d en Enero 03, 2022, 11:55:43 pm »
Gracias por toda esea info ,lo tengo ya lo solucione  cuando tenga mi juego te regalo una key  :P


var posx= camera_get_view_x(view_camera[0] )  
var posy= camera_get_view_y(view_camera[0] )






19
Preguntas y respuestas / one way slope Do you know the way?
« Último mensaje por Jeffrey Faper en Enero 03, 2022, 11:12:28 pm »
como dice el titulo cual es la manera correcta de executar one way slopes y ceiling slopes,   yo uso una mezcla de codigo sacados del tutorial de plataformas de monthy Drake y algunas cosas de una engine de un chico italiano  big mama era su nombre creo , bueno lo que me tiene intrigado,  es si lo estoy haciendo de la forma correcta o existe alguna manera mejor de hacerlo aqui les dejo el codigo y el projecto por si quieren echarle un viztaso y ayudarme a aclarar mis dudas, por lo poco que e probado el juego tiene poco bugs como quedarse atascado dentro de una plataforma solida y una plataforma oneway
projecto descarga :
https://drive.google.com/file/d/1fKNyJ3iKRho6NtjU3DdwUbySQkOdQ5zZ/view?usp=sharing
//EVENTO CREATE:
vspd     = 0;
hspd     = 0;
grvspd   = 0.5;
movspd   = 2.5;
jumpspd  = 8;
buffCounter = 0;
buffMax     = 0;
coyCounter = 0;
coyMax     = 6;
jumped     = 1;
minJump    = 1;
onGround   = 0;

//EVENTO STEP PLAYER:
/*******************************************************    
/* HORIZONTAL COLLISION CHECK                         **
/******************************************************/
repeat(abs(hspd)){
     //SOLID SLOPES-UPWARD
     if(place_meeting(x+sign(hspd),y  ,parSolid)
     && place_meeting(x+sign(hspd),y-1,parSolid)
     && place_meeting(x+sign(hspd),y-2,parSolid)
     && place_meeting(x+sign(hspd),y-3,parSolid)
     &&!place_meeting(x+sign(hspd),y-3,parSolid)) y-=4;
else if(place_meeting(x+sign(hspd),y  ,parSolid)
     && place_meeting(x+sign(hspd),y-1,parSolid)
     && place_meeting(x+sign(hspd),y-2,parSolid)
     &&!place_meeting(x+sign(hspd),y-3,parSolid)) y-=3;
else if(place_meeting(x+sign(hspd),y  ,parSolid)  
     && place_meeting(x+sign(hspd),y-1,parSolid)
     &&!place_meeting(x+sign(hspd),y-2,parSolid)) y-=2;
else if(place_meeting(x+sign(hspd),y  ,parSolid)
     &&!place_meeting(x+sign(hspd),y-1,parSolid)) y--;
     
     //SOLID SLOPES-DOWNWARD
     if(!place_meeting(x+sign(hspd),y  ,parSolid)
     && !place_meeting(x+sign(hspd),y+1,parSolid)
     && !place_meeting(x+sign(hspd),y+2,parSolid)
     && !place_meeting(x+sign(hspd),y+3,parSolid)
     && !place_meeting(x+sign(hspd),y+4,parSolid)
     &&  place_meeting(x+sign(hspd),y+5,parSolid)) y+=4;
else if(!place_meeting(x+sign(hspd),y  ,parSolid)
     && !place_meeting(x+sign(hspd),y+1,parSolid)
     && !place_meeting(x+sign(hspd),y+2,parSolid)
     && !place_meeting(x+sign(hspd),y+3,parSolid)
     &&  place_meeting(x+sign(hspd),y+4,parSolid)) y+=3;
else if(!place_meeting(x+sign(hspd),y  ,parSolid)
     && !place_meeting(x+sign(hspd),y+1,parSolid)
     && !place_meeting(x+sign(hspd),y+2,parSolid)
     &&  place_meeting(x+sign(hspd),y+3,parSolid)) y+=2;
else if(!place_meeting(x+sign(hspd),y  ,parSolid)  
     && !place_meeting(x+sign(hspd),y+1,parSolid)
     &&  place_meeting(x+sign(hspd),y+2,parSolid)) y++;
     
      //ONEWAY SLOPES-UPWARD
     if(!place_meeting(x,y+1,parSolid) && onGround){
     if(place_meeting(x+sign(hspd),y  ,parOneWay)  
     && place_meeting(x+sign(hspd),y-1,parOneWay)
     && place_meeting(x+sign(hspd),y-2,parOneWay)  
     && place_meeting(x+sign(hspd),y-3,parOneWay)
     &&!place_meeting(x+sign(hspd),y-4,parOneWay)) y-=4;    
else if(place_meeting(x+sign(hspd),y  ,parOneWay)  
     && place_meeting(x+sign(hspd),y-1,parOneWay)
     && place_meeting(x+sign(hspd),y-2,parOneWay)  
     &&!place_meeting(x+sign(hspd),y-3,parOneWay)) y-=3;    
else if(place_meeting(x+sign(hspd),y  ,parOneWay)  
     && place_meeting(x+sign(hspd),y-1,parOneWay)  
     &&!place_meeting(x+sign(hspd),y-2,parOneWay)) y-=2;    
else if(place_meeting(x+sign(hspd),y  ,parOneWay)  
     &&!place_meeting(x+sign(hspd),y-1,parOneWay)) y--;
     
     //ONEWAY SLOPES-DOWNWARD
     if(!place_meeting(x+sign(hspd),y  ,parOneWay)
     &&!place_meeting(x+sign(hspd),y+1,parOneWay)
     &&!place_meeting(x+sign(hspd),y+2,parOneWay)
     &&!place_meeting(x+sign(hspd),y+3,parOneWay)
     &&!place_meeting(x+sign(hspd),y+4,parOneWay)
     && place_meeting(x+sign(hspd),y+5,parOneWay)) y+=4;
else if(!place_meeting(x+sign(hspd),y  ,parOneWay)
     &&!place_meeting(x+sign(hspd),y+1,parOneWay)
     &&!place_meeting(x+sign(hspd),y+2,parOneWay)
     &&!place_meeting(x+sign(hspd),y+3,parOneWay)
     && place_meeting(x+sign(hspd),y+4,parOneWay)) y+=3;
else if(!place_meeting(x+sign(hspd),y  ,parOneWay)
     &&!place_meeting(x+sign(hspd),y+1,parOneWay)
     &&!place_meeting(x+sign(hspd),y+2,parOneWay)
     && place_meeting(x+sign(hspd),y+3,parOneWay)) y+=2;
else if(!place_meeting(x+sign(hspd),y  ,parOneWay)  
     &&!place_meeting(x+sign(hspd),y+1,parOneWay)
     && place_meeting(x+sign(hspd),y+2,parOneWay)) y++;}
     
     
     //LEFT-RIGHT SOLID COLISION CHECK
     if(!place_meeting(x+sign(hspd),y,parSolid)){
        x += sign(hspd);
      }
      else{
           hspd = 0;
           break;
      }
}

/*******************************************************    
/* VERTICAL COLLISION CHECK                           **
/******************************************************/
repeat(abs(vspd)){
     if(place_meeting(x,y+sign(vspd),parSolid))
        vspd = 0;
     if(vspd>0 && place_meeting(x,y+sign(vspd),parOneWay) && !place_meeting(x,y,parOneWay))
        vspd = 0;
else{if(vspd!=0){
        y += sign(vspd);}}
}    

/*******************************************************    
/* PLAYER STATES                                      **
/*******************************************************/  
var Left   = keyboard_check(vk_left);
var Right  = keyboard_check(vk_right);
var Down   = keyboard_check(vk_down);
var Up     = keyboard_check(vk_up);
var Jump   = keyboard_check_pressed(ord("W"));
var JumpC  = keyboard_check(ord("W"));
var Shot   = keyboard_check_pressed(ord("E"));
var move   = Right-Left;
         
        hspd  = move*movspd;
       
        onGround = place_meeting(x,y+1,parSolid);
     
     if(vspd>0 && !place_meeting(x,y,parOneWay) && place_meeting(x,y+1,parOneWay)){
        onGround = true
        }
     if(!place_meeting(x,y,parOneWay) && place_meeting(x,y+1,parOneWay)){
        onGround = true
        }
     if(onGround==false){vspd += grvspd;}
     if(onGround==true){minJump  = 1;}
     
     //CHANGE SPRITE SIGHT
     if(move== 1) && (onGround){image_xscale = 1;}
     if(move==-1) && (onGround){image_xscale =-1;}
   
    //COYOTE TIME
    if(!onGround)
    {
      if(coyCounter>0)
      {
         coyCounter -= 1;
         
         if(!jumped)
         {
           if(Jump){
              vspd =-jumpspd;
              jumped = 1;
           }
         }
      }
     }else{
            jumped = 0;
            coyCounter = coyMax;
          }
     //JUMP BUFFER
     if(Jump){
        buffCounter = buffMax;
        }
     if(buffCounter>0)
     {
        buffCounter -= 1;
           
        if(onGround){
           vspd =-jumpspd
           buffCounter = 0;
           jumped = 1;
        }
     }
     //JUMPING
     if(onGround && Jump){
        vspd =-jumpspd
        buffCounter = 0;
        jumped  = 1;
        }
     //MINI.JUMP
     if((!onGround) && (vspd<0) && (minJump==1) && (!JumpC)){
        vspd = 0;
        minJump = 0;
        }
/******************************************************************************    
/* CAMERA 1                                                                  **
/*****************************************************************************/
       
        view_xview[0] =((x-view_wview[0]/2)+view_xview[0]*4)/5
        view_yview[0] =((y-view_hview[0]/2)+view_yview[0]*5)/6

     if(view_xview[0]>room_width-view_wview[0]){view_xview[0] = room_width-view_wview[0];}
     if(view_yview[0]>room_height-view_hview[0]){view_yview[0] = room_height-view_hview[0];}
       
         

20
Preguntas y respuestas / Re: utilizar función clamp en camara
« Último mensaje por Jeffrey Faper en Enero 03, 2022, 04:02:51 am »
si no le funciona  aqui le dejo un ejemplo de como usar clamp, lo siento Game Maker elimino view_xview y view_wview que eran variables muy eficientes la verdad,  creo que las sustituyo por  camera_get_view_x(camera) y camera_get_view_width(camera) entonces para clampear el jugador a la view seria algo asi, no lo se
   //EVENTO STEP JUGADOR:
   //clamp x,y del jugador a la camara
    x = clamp(x ,camera_get_view_x(camera)+32 ,camera_get_view_x(camera)+camera_get_view_width(camera)-32);
    y = clamp(y ,camera_get_view_y(camera)+32 ,camera_get_view_y(camera)+camera_get_view_height(camera)-32);
   
   //SUMAR VELOCIDAD DE LA CAMARA A POSICION DEL JUGADOR  
   x += "camaraVelocidadHorizontal"; //SI EL JUGADOR DEJA DE MOVERSE ESTE MANTENDRA SU POSICION  HORIZONTAL RESPECTO A LA VIEW
   y += "camaraVelocidadVertical";  //SI EL JUGADOR DEJA DE MOVERSE ESTE MANTENDRA SU POSICION  VERTICAL RESPECTO A LA VIEW