witam. Od niedawna ucze sie SFML-a i postanowiłem napisać grę Snake. Stworzyłem klasę Snake (dziedzicząca po Drawable) oraz klase Engine zawierajaca składową prywatna w postaci klasy Snake.
klasa Snake:
#pragma once
#include<SFML/Graphics.hpp>
#include<iostream>
#include<vector>
class Snake: public sf::Drawable,
sf::Transformable
{
public:
Snake();
~Snake();
void SnakeMove(int a,int b);
// void AddElement();
// void SnakeColision();
private:
int length;
sf::RectangleShape snakeHead;
std::vector<sf::RectangleShape> pieceOfSnake;
virtual void draw(sf::RenderWindow &target, sf::RenderStates states) const;
};
klasa Engine:
#pragma once
#include "Snake.h"
class Engine
{
public:
Engine(sf::RenderWindow& window);
void runEngine();
private:
sf::RenderWindow *window1;
Snake snake;
// Food food;
void Collision(){};
void update(){};
void draw();
};
pliki cpp.
Snake
#include "Snake.h"
Snake::Snake():length(0)
{
snakeHead.setSize(sf::Vector2f(40,40));
snakeHead.setFillColor(sf::Color::Red);
snakeHead.setOrigin(sf::Vector2f(20,20))
snakeHead.setPosition(sf::Vector2f(400,250));
}
void Snake::SnakeMove(int a ,int b)
{
if(sf::Keyboard::isKeyPressed(RIGHT)
{
snakeHead.rotate(90)
}
else if(sf::Keyboard::isKeyPressed(LEFT))
{
snakeHead.rotate(-90);
}
snakeHead.move(a,b);
}
void Snake::draw(sf::RenderWindow &target,sf::RenderStates states)const
{
states.transform *= getTransform();
target.draw(snakeHead,states);
}
Engine
#include "engine.h"
Engine::Engine(sf::RenderWindow & window)
{
window1 = &window;
}
void Engine::runEngine()
{
sf::Event event1;
while(window1->pollEvent(event1))
{
if(event1.type == sf::Event::KeyPressed)
snake.SnakeMove(0,0);
}
sf::Clock clock;
sf::Time time = clock.getElapsedTime();
if(time == sf::seconds(1) )snake.SnakeMove(5,0);
draw();
}
void Engine::draw()
{
window1->clear();
window1->draw(snake);
window1->display();
}
Bład pojawia sie w miejscu w którym tworzę składową typu Snake w klasie Engine.
error; cannot declare field 'Engine::snake' to be of abstract type 'Snake'|
note: because the following virtual functions are pure within 'Snake':| virtual void note:sf::Drawable::draw(sf::RenderTarget&, sf::RenderStates) const|
Bardzo długo szukałem błedu ale nie udało sie nic znależć. Proszę o pomoc.
Pozdrawiam