The next issue I'm having is including/creating objects into the Tier 2 code. I have two files, Asteroid.cpp and Asteroid.h, and I'm trying to call their constructor in the code but it throws out this error when I attempt to call the constructor:
Paul@Paul-PC /cygdrive/c/android/AGK/IDE/templates/template_android_t2
$ /cygdrive/c/android/android-ndk-r8b/ndk-build 2> log.txt
Compile++ arm : android_player <= template.cpp
SharedLibrary : libandroid_player.so
/cygdrive/c/android/android-ndk-r8b/build/core/build-binary.mk:378: recipe for target `obj/local/armeabi/libandroid_player.so' failed
The error message in the log is:
In file included from jni/../../../common/include/Common.h:290:0,
from jni/../../../common/include/agk.h:6,
from jni/template.h:5,
from jni/template.cpp:2:
C:/android/android-ndk-r8b/platforms/android-9/arch-arm/usr/include/jni.h:592:13: note: the mangling of 'va_list' has changed in GCC 4.4
./obj/local/armeabi/objs/android_player/template.o: In function `app::Begin()':
C:\android\AGK\IDE\templates\template_android_t2/jni/template.cpp:20: undefined reference to `Asteroid::Asteroid(unsigned int)'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libandroid_player.so] Error 1
----
My Asteroid.cpp is:
#include "Asteroid.h"
#include "template.h"
//generic constructor for initial asteroids
//Must do another for sub-asteroids
Asteroid::Asteroid()
{
}
Asteroid::Asteroid(unsigned int asteroidSize)
{
size = asteroidSize;
id = agk::CreateSprite("asteroid.png");
//Set position
do
{
dirX = (float) (rand() % 100);
} while(dirX > 65 && dirX < 35);
do
{
dirY = (float) (rand() % 100);
} while(dirY > 65 && dirY < 35);
agk::SetSpritePosition(id, dirX, dirY );
//Smallest
if(asteroidSize == 1)
agk::SetSpriteSize(id, 4.0f, 4.0f);
//Medium
if(asteroidSize == 2)
agk::SetSpriteSize(id, 8.0f, 8.0f);
//Large
if(asteroidSize == 3)
agk::SetSpriteSize(id, 12.0f, 12.0f);
/*
Some asteroids will be faster than others and in
different directions
*/
dirX = (float) (rand() % 100);
if(rand() % 2 == 1)
dirX = -dirX;
dirY = (float) (rand() % 100);
if(rand() % 2 == 1)
dirY = -dirY;
agk::SetSpritePhysicsOn(id, 3);
agk::SetSpritePhysicsVelocity(id, dirX, dirY);
agk::SetSpritePhysicsAngularVelocity(id, 1.0f);
agk::SetSpriteShape(id, 1);
}
Asteroid::Asteroid(bool subAsteroid, unsigned short asteroidSize, float x, float y)
{
size = asteroidSize;
id = agk::CreateSprite("/asteroid.png");
agk::SetSpritePosition(id, x, y);
if(size == 2)
agk::SetSpriteSize(id, 8.0f, 8.0f);
else if (size == 1)
agk::SetSpriteSize(id, 4.0f, 4.0f);
dirX = (float) (rand() % 100);
if(rand() % 2 == 1)
dirX = -dirX;
dirY = (float) (rand() % 100);
if(rand() % 2 == 1)
dirY = -dirY;
agk::SetSpritePhysicsOn(id, 3);
agk::SetSpritePhysicsVelocity(id, dirX, dirY);
agk::SetSpritePhysicsAngularVelocity(id, 1.0f);
agk::SetSpriteShape(id, 1);
}
/*
Used to reset the physics velocity when turned off by SetSpritePosition
*/
void Asteroid::setAsteroidVelocity()
{
agk::SetSpritePhysicsVelocity(id, dirX, dirY);
}
and Asteroid.h is
#pragma once
class Asteroid
{
public:
//Functions
Asteroid();
Asteroid(unsigned int size);
Asteroid(bool subAsteroid, unsigned short asteroidSize, float x, float y);
void setAsteroidVelocity();
int MAX_WIDTH;
int MAX_HEIGHT;
//Variables
unsigned short size;
unsigned int id;
float dirX;
float dirY;
};
I am able to declare the memory space for an asteroid in the global declaration area with Asteroid tmpAsteroid1; but my error comes in when I add this line into the begin() loop: tmpAsteroid1 = new Asteroid(3);