Game Development Community

Collision Not Working

by Conlan Rios · in Torque Game Builder · 03/16/2006 (8:48 pm) · 2 replies

Hi,
I just got Torque yesterday and am going through the tutorial. I'd really appreciate it if someone could look over this code and tell me why the collisions aren't working.
Thanks for your help!

function CreatePlayer()
{
	// create the player
	$player = new t2dStaticSprite() { scenegraph = t2dScene; };
	$player.setPosition("-35 0");
	$player.setSize( "14 7" );
	$player.setImageMap( playershipImageMap );
	$player.fireLinkPoint = $player.addLinkPoint( "0.45 0.2" );
	$player.setWorldLimit( clamp, "-49 -37 40 37");
	
	// create a new action map
	new ActionMap (playerMap);
	
	// bind keys to actions
	playerMap.bindCmd(keyboard, "w", "playerUp();", "playerUpStop();");
	playerMap.bindCmd(keyboard, "s", "playerDown();", "playerDownStop();");
	playerMap.bindCmd(keyboard, "a", "playerLeft();", "playerLeftStop();");
	playerMap.bindCmd(keyboard, "d", "playerRight();", "playerRightStop();");
	playerMap.bindCmd(keyboard, "space", "playerFire();", "");
	
	// activate the action map
	playerMap.push();
	
	// Set player's collision info:
	$player.setGroup( 1 );
	$player.setLayer( 1 );
	$player.setCollisionActive( true, true );
	$player.setCollisionPolyCustom( 4, "-1 0 -0.1 -0.6 0.98 0.15 -0.1 0.7" );
	$player.setCollisionMasks( BIT(2), BIT(2) );
	$player.setCollisionCallback( true );
}
function CreateEnemy()
{
	// Add Enemy
	%enemy = new t2dStaticSprite() { scenegraph = t2dScene; };
	%enemy.setPosition("40" SPC (-30 + (getRandom() * 60)));
	%enemy.setSize( "14 7");
	%enemy.setImageMap ( enemyship1ImageMap );
	
	// move the enemy toward us
	%enemy.setLinearVelocityX(-20);
	%enemy.setWorldLimit( kill, "-60 -40 60 40" );
	
	// Set enemy collision info
	%enemy.setGroup( 2 );
	%enemy.setLayer( 2 );
	%enemy.setCollisionActive( true, true );
	%enemy.setCollisionPolyCustom( 5, "-0.9 0 0 -0.6 1 -0.3 1 0.3 0 0.5" );
	%enemy.setCollisionMasks( BIT(1), BIT(1) );
	%enemy.setCollisionCallback( true );
 		
	// make the enemy missile and firing
	%enemyfire = new t2dStaticSprite() { scenegraph = t2dScene; } ;
	%enemyfire.setPosition( %enemy.getPosition() );
	%enemyfire.setSize( "3 1.5" );
	%enemyfire.setImageMap( enemymissileImageMap );
	%enemyfire.setLinearVelocityX( -35 );
	%enemyfire.setWorldLimit( kill, "-60 -40 60 40");
	
	// Set up collision info
	%enemyfire.setGroup( 2 );	
	%enemyfire.setLayer( 2 );
	%enemyfire.setCollisionActive( true, true );
	%enemyfire.setCollisionPolyScale("0.9 0.5");
	%enemyfire.setCollisionMasks( BIT(1), BIT(1) );
	%enemyfire.setCollisionCallback( true );
		
	schedule(2000, 0, "CreateEnemy");
}
function playerFire()
{
	// Create Player Missile
	%projectile = new t2dStaticSprite() { scenegraph = t2dScene; } ;
	%projectile.setPosition( $player.getLinkPoint( $player.fireLinkPoint) );
	%projectile.setSize( "3 1.5" );
	%projectile.setImageMap( playermissileImageMap );
	%projectile.setLinearVelocityX ( 35 );
	%projectile.setWorldLimit( kill, "-60 -40 60 40");
	
	// Setup collision info
	%projectile.setGroup( 1 );
	%projectile.setLayer( 1 );
	%projectile.setCollisionActive(true, true);
	%projectile.setCollisionPolyScale("0.9 0.5");
	%projectile.setCollisionMasks( BIT(2), BIT(2));
	%projectile.setCollisionCallback( true );
}
function KillPlayer()
{
	$player.setVisible( false );
	playerMap.pop();
	schedule(2000, 0, "ResetPlayer");
}
function ResetPlayer()
{
	$player.setPosition("-35 0");
	$player.setVisible(true);
	playerMap.push();
}
function t2dSceneObject::onCollision( %srcObj, %dstObj, %srcRef, %dstRef, %time, %normal, %contactCount, %contacts )
{
	if (%srcObj == $player)
	{
	KillPlayer();
	%dstObj.safeDelete();
	}
	else if (%dstObj == $player)
	{
		KillPlayer();
		%srcObj.safeDelete();
	}
	else
	{
		%srcObj.safeDelete();
		%dstObj.safeDelete();
	}
}

#1
03/16/2006 (10:52 pm)
.setGroup was changed to .setGraphGroup :-)
I think that might already be everything.
The console should have given you that message as well that it did not find .setGroup.
#2
03/16/2006 (11:02 pm)
Thanks so much! The Basic Tutorial should be updated then because this is what they have:
// Setup collision info
%projectile.setGroup( 1 );
%projectile.setLayer( 1 );
%projectile.setCollisionActive(true, true);
%projectile.setCollisionPolyScale("0.9 0.5");
%projectile.setCollisionMasks( BIT(2), BIT(2));
%projectile.setCollisionCallback( true );
Once again thank you!