GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Retorno da GMBR!!!
por theguitarmester Ter 19 Mar 2024, 22:38

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16

» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05

» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55

» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39

» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28

» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01


[Script] Ajuda em C++ com SFML

2 participantes

Ir para baixo

[Script] Ajuda em C++ com SFML Empty [Script] Ajuda em C++ com SFML

Mensagem por janrie Sex 05 Out 2012, 10:20

Pessoal, tenho um codigo que esta dando um erro e precisava da ajuda de alguem ai que entenda de C++, esse codigo serve para pegar o shape de um triangulo efazer a translaçao, aumentar a sua escala em 10% e rotacionar em torno de um angulo, só que ta dando erro na linha 29.

Código:
#include <iostream>
#include <math.h>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#define PI 3.1416

class Ponto
{
public:
    float x,x1;
    float y,y1;
    Ponto(float _x, float _y) : x(_x), y(_y) {}
};



void translacao(Ponto * p, int tamanho, float tx, float ty)
{
    for (int i =0; i < tamanho; i++) //aplicaa operação de escala
    {
        p[i].x += tx;
        p[i].y += ty;
    }
}

void escala(Ponto * p, int tamanho, float ex, float ey)
{
    Ponto *pivo = new Ponto(p[0].x, p[0].y);//desloca o pivo de x para a posição 0
    translacao(-pivo.x, -pivo.y);//usando pivo negativo
    for (int i =0; i < tamanho; i++)
    {
        p[i].x *= ex;
        p[i].y *= ey;
    }
    translacao(p, tamanho, pivo->x, pivo->y);//move de volta os pontos para a origem
    delete (pivo);
}

void rotacao(Ponto * p[], int tamanho, float ang)
{
    int xAux=0;
    int yAux=0;
    Ponto *pivo = new Ponto(p[0].x, p[0].y);//desloca o pivo de x para a posição 0
  //translacao(-pivo.x, -pivo.y);//usando pivo negativo
    for (int i=0; i < tamanho; i++)
    {
        xAux=(p[i]->x * cos(ang)) + (p[i]->y * -sin(ang));
        yAux=(p[i]->x * sin(ang)) + (p[i]->y * cos(ang));
        p[i]->x=xAux;
        p[i]->y=yAux;
    }
    //translação(pivo.x, pivo.y);//move de volta os pontos para a origem
}


void distanciaeuclidiana(Ponto * p[], int tamanho, float x2,float x1,float y2,float y1)
{
    double distancia;//calcula a distancia entre dois pontos
    for (int i = 0; i < tamanho; i++)
    {
        distancia=sqrt (pow((p[i]->x1-p[i]->x),2)+pow((p[i]->y1-p[i]->y),2));
    }
}
float graus2radianos (float grau) //converte graus para radianos
{
    return (grau/180) * PI;
}

float a = graus2radianos(15);
float x = cos(a);
float y = sin(a);




int main()
{
    //sf::RenderWindow* app = new sf::RenderWindow(sf::VideoMode(800, 600, 32), "Triangulo 2D");
    sf::RenderWindow Window(sf::VideoMode (800, 600, 32), "SFML Made Easy");

    Ponto* triangulo[3];
    triangulo[0] = new Ponto(50, 100);
    triangulo[1] = new Ponto(100, 50);
    triangulo[2] = new Ponto(150, 100);

    while (Window.IsOpened())
    {
        sf::Event* event = new sf::Event();
        while (Window.GetEvent(*event))
        {
            if (event->Type == sf::Event::Closed)
            {
                Window.Close();
            }
        }
        if (Window.GetInput().IsKeyDown(sf::Key::Escape))
        {
            return EXIT_SUCCESS;
        }

        Window.Clear(sf::Color(255, 255, 255));
        for (int i = 0; i < 3; i++)
        {
            int j = i + 1;
            if (j > 2) j = 0;
            sf::Shape line = sf::Shape::Line(triangulo[i]->x, triangulo[i]->y,
                                            triangulo[j]->x, triangulo[j]->y,
                                            1, sf::Color(0, 0, 0));

            translacao(triangulo, 3, 0, 0);
            if(Window.GetInput().IsKeyDown(sf::Key::Right))
                line.Move (10, 0);
            else if (Window.GetInput().IsKeyDown(sf::Key::Left))
                line.Move (-10, 0);
            else if(Window.GetInput().IsKeyDown(sf::Key::Up))
                line.Move(0, -10);
            else if(Window.GetInput().IsKeyDown(sf::Key::Down))
                line.Move(0, 10);
            escala(triangulo,3,1,2);
            if(Window.GetInput().IsKeyDown(sf::Key::PageUp))
                line.SetScaleX(10);
            else if(Window.GetInput().IsKeyDown(sf::Key::PageDown))
                line.SetScaleY(10);
            rotacao(triangulo,3,15);
            if (Window.GetInput().IsKeyDown(sf::Key::D))
                line.Rotate(-15);
            else if (Window.GetInput().IsKeyDown(sf::Key::E))
                line.Rotate(+15);
            Window.Draw(line);
        }
        Window.Display();
    }
    return EXIT_SUCCESS;
}

Se alguem puder me ajudar eu agradeço
Obrigado.
janrie
janrie

Data de inscrição : 16/08/2012
Reputação : 0
Número de Mensagens : 15
Prêmios : [Script] Ajuda em C++ com SFML Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Script] Ajuda em C++ com SFML Empty Re: [Script] Ajuda em C++ com SFML

Mensagem por PedroX Sex 05 Out 2012, 11:21

Qual é o erro?
Tem como você postar um código mais específico ao problema (minimalista)?

Até mais!

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6086
Prêmios : [Script] Ajuda em C++ com SFML Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

[Script] Ajuda em C++ com SFML Empty Re: [Script] Ajuda em C++ com SFML

Mensagem por janrie Sex 05 Out 2012, 11:24

o erro que aparece, aparece na linha 29, nessa função aqui:

void escala(Ponto * p, int tamanho, float ex, float ey)
{
Ponto *pivo = new Ponto(p[0].x, p[0].y);//desloca o pivo de x para a posição 0
translacao(-pivo.x, -pivo.y);//usando pivo negativo
for (int i =0; i < tamanho; i++)
{
p[i].x *= ex;
p[i].y *= ey;
}
translacao(p, tamanho, pivo->x, pivo->y);//move de volta os pontos para a origem
delete (pivo);
}

o erro é o seguinte: request no member x in pivo, which is of non-class type ponto*
janrie
janrie

Data de inscrição : 16/08/2012
Reputação : 0
Número de Mensagens : 15
Prêmios : [Script] Ajuda em C++ com SFML Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Script] Ajuda em C++ com SFML Empty Re: [Script] Ajuda em C++ com SFML

Mensagem por PedroX Sex 05 Out 2012, 11:32

Parece que você não criou p[0], você apenas tentou definir o x dele. Você criou p[0] em alguma parte?

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6086
Prêmios : [Script] Ajuda em C++ com SFML Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

[Script] Ajuda em C++ com SFML Empty Re: [Script] Ajuda em C++ com SFML

Mensagem por janrie Sex 05 Out 2012, 11:34

sim, criei ali na linha dentro da função

Ponto *pivo = new Ponto(p[0].x, p[0].y);
janrie
janrie

Data de inscrição : 16/08/2012
Reputação : 0
Número de Mensagens : 15
Prêmios : [Script] Ajuda em C++ com SFML Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Script] Ajuda em C++ com SFML Empty Re: [Script] Ajuda em C++ com SFML

Mensagem por janrie Seg 15 Out 2012, 21:13

Consegui arrumar os erros, mas agora na hora da compilação não acontece o que eu queria, por exemplo, tem a função de translação, que era para transladar o triangulo para os lados e para cima quando apertasse as setas do teclado, até acontece isso, mas depois de solta a tecla, o triangulo volta para a posição inicial, alguem sabe como resolver isso?
O código é esse pra alguem poder me ajudar:




Código:
#include <iostream>
#include <math.h>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#define PI 3.1416

class Ponto
{
public:
    float x,x1;
    float y,y1;
    Ponto(float _x, float _y) : x(_x), y(_y) {}
};



void translacao(Ponto * p[], int tamanho, float tx, float ty)
{
    for (int i =0; i < tamanho; i++) //aplicaa operação de escala
    {
        p[i]->x += tx;
        p[i]->y += ty;
    }
}

void escala(Ponto * p[], int tamanho, float ex, float ey)
{
    Ponto *pivo = new Ponto(p[0]->x, p[0]->y);//desloca o pivo de x para a posição 0
    translacao(p, tamanho, -pivo->x, -pivo->y);//usando pivo negativo
    for (int i =0; i < tamanho; i++)
    {
        p[i]->x *= ex;
        p[i]->y *= ey;
    }
    translacao(p, tamanho, pivo->x, pivo->y);//move de volta os pontos para a origem
    delete (pivo);
}

void rotacao(Ponto * p[], int tamanho, float ang)
{
    int xAux=0;
    int yAux=0;
    Ponto *pivo = new Ponto(p[0]->x, p[0]->y);//desloca o pivo de x para a posição 0
    translacao(p, tamanho, -pivo->x, -pivo->y);//usando pivo negativo
    for (int i=0; i < tamanho; i++)
    {
        xAux=(p[i]->x * cos(ang)) + (p[i]->y * -sin(ang));
        yAux=(p[i]->x * sin(ang)) + (p[i]->y * cos(ang));
        p[i]->x=xAux;
        p[i]->y=yAux;
    }
    translacao(p, tamanho, pivo->x, pivo->y);//move de volta os pontos para a origem
}


void distanciaeuclidiana(Ponto * p[], int tamanho, float x2,float x1,float y2,float y1)
{
    double distancia;//calcula a distancia entre dois pontos
    for (int i = 0; i < tamanho; i++)
    {
        distancia=sqrt (pow((p[i]->x1-p[i]->x),2)+pow((p[i]->y1-p[i]->y),2));
    }
}
float graus2radianos (float grau) //converte graus para radianos
{
    return (grau/180) * PI;
}

float a = graus2radianos(15);
float x = cos(a);
float y = sin(a);




int main()
{
    //sf::RenderWindow* app = new sf::RenderWindow(sf::VideoMode(800, 600, 32), "Triangulo 2D");
    sf::RenderWindow Window(sf::VideoMode (800, 600, 32), "SFML Made Easy");

    Ponto* triangulo[3];
    triangulo[0] = new Ponto(50, 100);
    triangulo[1] = new Ponto(100, 50);
    triangulo[2] = new Ponto(150, 100);

    while (Window.IsOpened())
    {
        sf::Event* event = new sf::Event();
        while (Window.GetEvent(*event))
        {
            if (event->Type == sf::Event::Closed)
            {
                Window.Close();
            }
        }
        if (Window.GetInput().IsKeyDown(sf::Key::Escape))
        {
            return EXIT_SUCCESS;
        }

        Window.Clear(sf::Color(255, 255, 255));
        for (int i = 0; i < 3; i++)
        {
            int j = i + 1;
            if (j > 2) j = 0;
            sf::Shape line = sf::Shape::Line(triangulo[i]->x, triangulo[i]->y,
                                            triangulo[j]->x, triangulo[j]->y,
                                            1, sf::Color(0, 0, 0));

            translacao(triangulo, 3, 0, 0);
            if(Window.GetInput().IsKeyDown(sf::Key::Right))
                line.Move (10, 0);
            else if (Window.GetInput().IsKeyDown(sf::Key::Left))
                line.Move (-10, 0);
            else if(Window.GetInput().IsKeyDown(sf::Key::Up))
                line.Move(0, -10);
            else if(Window.GetInput().IsKeyDown(sf::Key::Down))
                line.Move(0, 10);
            escala(triangulo,3,1,2);
            if(Window.GetInput().IsKeyDown(sf::Key::PageUp))
                line.SetScaleX(10);
            else if(Window.GetInput().IsKeyDown(sf::Key::PageDown))
                line.SetScaleY(10);
            /*rotacao(triangulo,3,15);
            if (Window.GetInput().IsKeyDown(sf::Key::D))
                line.Rotate(-15);
            else if (Window.GetInput().IsKeyDown(sf::Key::E))
                line.Rotate(+15);*/
            Window.Draw(line);
        }
        Window.Display();

    }
    return EXIT_SUCCESS;
}

Desde ja eu agradeço
Obrigado.
janrie
janrie

Data de inscrição : 16/08/2012
Reputação : 0
Número de Mensagens : 15
Prêmios : [Script] Ajuda em C++ com SFML Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Script] Ajuda em C++ com SFML Empty Re: [Script] Ajuda em C++ com SFML

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos