Tengo dos archivos .CPP, estos son:
gameLibZero.cpp
game.cpp
En el primero esta escrita una clase llamada sprite.
en el segundo archivo extiendo la clase sprite y la llamo cosa..
El problema es muy basico, el constructor de 'sprite' lo único que hace es añadir esa instancia de clase a un vector de objetos, osea, añade el sprite a la lista de sprites, esto lo hace bien.
Pero el tema es que sprite tiene un metodo llamado "void frame(){}", cosa que es heredada de sprite tiene también su metodo 'frame', lo que quiero es ejecutar el frame de "cosa" en vez del frame de "sprite" que es el generico.
Pego el codigo:
- /*******************************************************************************************
- *
- * gameLibZero 0.1 by: Luis Lopez Martinez. 28/11/2018
- *
- ********************************************************************************************/
- #include "raylib.h"
- #include <vector>
- #include <algorithm>
- #include <stdio.h>
- using namespace std;
- class sprite;
- vector<sprite>sprites;
- void setup();
- void draw();
- //------------------------------------------------------------------------------------------------------
- class sprite{
- public:
- bool visible = false;
- Texture2D graph;
- float x = 0;
- float y = 0;
- float z = 0;
- float size = 100;
- float angle = 0;
- float alpha = 255;
- sprite(){
- sprites.push_back(*this);
- }
- virtual void frame(){
- //j++;
- }
- void render(){
- if(visible){
- screenDrawGraphic(graph, x, y, angle, size, alpha);
- }
- }
- };
- //------------------------------------------------------------------------------------------------------
- int main()
- {
- // Initialization
- setup();
- // Main game loop
- while (!WindowShouldClose()) // Detect window close button or ESC key
- {
- // Update
- //----------------------------------------------------------------------------------
- // TODO: Update your variables here
- for(auto s : sprites){ // draw game sprites..
- s.frame();
- }
- //----------------------------------------------------------------------------------
- // Draw
- //----------------------------------------------------------------------------------
- BeginDrawing();
- ClearBackground(RAYWHITE);
- draw(); // main game code call..
- for(auto s : sprites){ // draw game sprites..
- s.render();
- }
- EndDrawing();
- //----------------------------------------------------------------------------------
- }
- // De-Initialization
- //--------------------------------------------------------------------------------------
- CloseWindow(); // Close window and OpenGL context
- //--------------------------------------------------------------------------------------
- return 0;
- }
- /* gameLibZero game.cpp template */
- int j = 0;
- #include "gameLibZero.cpp"
- // Global var block..
- Texture2D img;
- int st = 0;
- //--------------------------------------------------------------------------------------
- void setup(){
- setMode(1280, 720);
- //ToggleFullscreen();
- setTitle("gameLibZero 0.1 pre alpha!!!!");
- setFps(60);
- img = loadImage("data/images/00.png");
- }
- //--------------------------------------------------------------------------------------
- class cosa : public sprite{
- public:
- void frame(){
- j++;
- }
- };
- //--------------------------------------------------------------------------------------
- void draw(){
- switch(st){
- case 0:
- cosa* c = new cosa();
- st = 10;
- break;
- }
- }
- //--------------------------------------------------------------------------------------
- //--------------------------------------------------------------------------------------
Veis como 'cosa' tiene su metodo "frame()", y es este el que quiero ejecutar desde este trozo de codigo del primer archivo:
- // Update
- //----------------------------------------------------------------------------------
- // TODO: Update your variables here
- for(auto s : sprites){ // draw game sprites..
- s.frame();
- }
Creo que estoy añadiendo al vector de objetos la instance de 'sprite' y no la de 'cosa', puede ser ese el problema?