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!
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();
}
}About the author
#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!
Torque 3D Owner Marc Dreamora Schaerer
Gayasoft
I think that might already be everything.
The console should have given you that message as well that it did not find .setGroup.