[java] Function Pointer Technique.
How one can used function pointer technique used in c++ through java?
So that I can avoid lots of if- else structures for making a check.
If I get particular object then I want to directly call a method associated with it.
Please Help.
Please post the C++ code you are trying to emulate so we can help you better. Your explanation is not very clear.
So if I have say 10 obstacles in my game. And suppose my game is screen based and i know that in particular screen only two objects are there whose Identifier I know.
Suppose in c
10 obstacles
const int obst_1 = 0;
const int obst_2 = 1;
const int obst_3 = 2;
.....
const int obst_10 = 9;
and suppose I have arr1[10] array of pointers which contains pointers to different
ten functions which are used to handle specific obstacle collisions.
so if I am on screen number two and my game script gave me the information about that screen that obstacle 10 and 5 are present on this screen. then for collision and response I just want to used two function calls whithout any if else structure.
like instead of
chk_collision()
{
if(obst == obst_1)
then obst1_Collision();
else if(obst == obst_2)
then obst2_Collision();
.....
}
something like
chk_collision()
{
for(i=0;i<obst_num;i++)
{
*arr[obst_id]();
}
}
where obst_id[] contains identifier for the obstacles present in the current screen.
So using java how to implement function pointers.
Suppose in c
10 obstacles
const int obst_1 = 0;
const int obst_2 = 1;
const int obst_3 = 2;
.....
const int obst_10 = 9;
and suppose I have arr1[10] array of pointers which contains pointers to different
ten functions which are used to handle specific obstacle collisions.
so if I am on screen number two and my game script gave me the information about that screen that obstacle 10 and 5 are present on this screen. then for collision and response I just want to used two function calls whithout any if else structure.
like instead of
chk_collision()
{
if(obst == obst_1)
then obst1_Collision();
else if(obst == obst_2)
then obst2_Collision();
.....
}
something like
chk_collision()
{
for(i=0;i<obst_num;i++)
{
*arr[obst_id]();
}
}
where obst_id[] contains identifier for the obstacles present in the current screen.
So using java how to implement function pointers.
In C++, you'd probably do that using virtual functions.
In Java, you can use interfaces for the same thing. Implement an interface with a single function, which is the method signature you want, and store a pointer to interface in your array. Then call that.
Note: you'd probably want to store the pointer to the obstacle, rather than the obstacle id. That way, you can call the method directly.
In Java, you can use interfaces for the same thing. Implement an interface with a single function, which is the method signature you want, and store a pointer to interface in your array. Then call that.
Note: you'd probably want to store the pointer to the obstacle, rather than the obstacle id. That way, you can call the method directly.
Here is an interface:
The your objects would implement this interface:
Then your array would be:
If you are using a script file, you can use Reflection to create objects from their name.(Don't use Reflection in speed critical code. It should be used only in load up times as it is slow.)
public interface Environment { //only method definitions here, no code public void collision();}
The your objects would implement this interface:
public class Axe implements Environment { public void collision() { //collision code for Axe }}public class Broom implements Environment { public void collision() { //collision code for Broom }}
Then your array would be:
Environment myEnv[] = new Environment[10];myEnv[0] = new Axe();myEnv[1] = new Broom(); . . .for(int i=0;i<myEnv.length;i++) { myEnv.collision();}
If you are using a script file, you can use Reflection to create objects from their name.(Don't use Reflection in speed critical code. It should be used only in load up times as it is slow.)
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement