Storing a reference to the calling object
Luis
luis.panadero at gmail.com
Sat May 23 09:51:27 UTC 2020
On Saturday, 23 May 2020 at 09:27:46 UTC, Tim wrote:
> Hi all, I'm a little new to D and I'm wondering how I can store
> a reference to the calling object. I want to create a reference
> to an object's parent so that each time I go to update the
> sprite, it is able to grab its position from the parent.
>
> So if I have:
>
> class Sprite{
> /// Postional components of the sprite
> int* x, y;
> SDL_Surface* image_surface;
> auto parent;
>
> this(const char* path, auto parent){
> writeln(*x);
> this.parent = parent;
> }
>
> void update(){
> // Copy loaded image to window surface
> writeln("Sprites x: ", *x);
> SDL_Rect dstRect;
> dstRect.x = parent.x;
> dstRect.y = parent.y;
> SDL_BlitSurface(image_surface, null, g_surface,
> &dstRect);
> }
> }
>
> And call it like so:
>
> sprite = new Sprite(path, this);
>
> How can I make this sort of thing work? Thanks a lot in advance
> for the help!
For example using a interface or a base class
```D
interface IBaseInterface
{
int x();
void x(int newX);
int y()
void y(int newY);
...
}
class Parent : IBaseInterface
{
private int x, y;
int x() { return this.x; }
void x(int newX) { this.x = newX; }
int y() { return this.y; }
void y(int newY) { this. y = newY; }
...
void f() {
auto sprite = new Sprite("foo/bar/sprite.png", this);
...
}
}
class Sprite{
IBaseInterface parent;
...
this(const char* path, IBaseInterface parent){
writeln(*x);
this.parent = parent;
}
void update(){
// Copy loaded image to window surface
writeln("Sprites x: ", *x);
SDL_Rect dstRect;
dstRect.x = parent.x;
dstRect.y = parent.y;
SDL_BlitSurface(image_surface, null, g_surface,
&dstRect);
}
}
```
More information about the Digitalmars-d-learn
mailing list