Torque2D/pong Tutorial TGB Game Arena

From TDN

This page is a Work In Progress.

Contents


Setting up a Tile Map


This is the function I use to load up the game arena. Put this in ./arena.cs.

function createArena(%width, %height)
{
   %arena = new t2dTileMap() { scenegraph = t2dscene; };
   %arena.loadTileMap("~/data/tileMaps/arena1.tile");
   %layer = %arena.getTileLayer(0);
   
   %layer.setCollisionActive(false, true);
   %layer.setGraphGroup($arenaGroup);
   %layer.setLayer($arenaLayer);
   
   // Hardcoded values not very good, this will
   // be change in later versions.
   %layer.setTileSize("2 2");
   %layer.setPosition("49 37");   
}






Setting up Collisions


This is a simple version of the onCollision function. This function should be located in ./game.cs.

function t2dSceneObject::onCollision(%srcObj, %dstObj, %srcRef,
   %dstRef, %time, %normal, %contactCount, %contacts)
{
   switch ( %srcObj.getGraphGroup() )
   {
      case $ballGroup: // the ball hits something
         switch ( %dstObj.getGraphGroup() )
         {
            case $paddleGroup: // the ball hit the paddle
               error("Hit Paddle...");
               %scoreModifier = 10;
               updateScore(%scoreModifier);
              
            case $arenaGroup: // the ball hit the arena wall
               error("Hit Arena wall...");
               
            case $triggerGroup: // the ball hit a trigger. I used a trigger for the area behind the paddle.
               
               killBall(%srcObj); 
               
            case $ballGroup: // the ball hit another ball
               error("Hit another Ball...");
               
         } 
         
         checkVelocity(%srcObj); // this function is to ensure a minimum speed and angle. 
   } 
      
}





Setting up a Trigger


As with most of the code in this tutorial, I found this in another tutorial on TDN. The following code should be placed in a new file called trigger.cs, and should be placed in the gamescripts directory. This will be used to create a trigger to determine when the ball passes beyond the paddle and out of bounds. The actual trigger is created in the createArena() function in the file arena.cs.

new SimGroup(TriggerCheckGroup);

function createTrigger(%pos, %size, %enter, %stay, %leave)
{
   %trigger = new t2dSceneObject() { scenegraph = t2dscene; };
   %trigger.setPosition(%pos);
   %trigger.setSize(%size);
   
   %trigger.setLayer($triggerLayer);
   %trigger.setGraphGroup($triggerGroup);
   %trigger.setCollisionMasks(BIT($ballGroup), BIT($ballLayer));
   %trigger.setCollisionActive(true, true);
   
   %trigger.enterAction = %enter;
   %trigger.stayAction = %stay;
   %trigger.leaveAction = %leave;
   //%trigger.setDebugOn(BIT(0));
}

function collidePlayerTrigger(%trigger)
{
   TriggerCheckGroup.add(%trigger); 
   %trigger.inNow = true;
}

function checkTrigger(%trigger)
{
   if (!%trigger.inPrev && %trigger.inNow)
      schedule(0, 0, "eval", %trigger.enterAction);
      
   else if (%trigger.inPrev && %trigger.inNow)
      schedule(0, 0, "eval", %trigger.stayAction);
      
   else if (%trigger.inPrev && !%trigger.inNow)
   {
      schedule(0, 0, "eval", %trigger.leaveAction);
      TriggerCheckGroup.remove(%trigger);
   }
   
   %trigger.inPrev = %trigger.inNow;
   %trigger.inNow = false;
}




Back - The Game Arena | Overview | Next - The paddles