Asynchronizacja konsoli w programie okienkowym + kilka głupot.

0
  1. Czy zna ktoś z was prosty kod lub wskazówki na stworzenie asynchronicznej konsoli?
  2. Mam zrobionego gracza(poza pętlą)
sf::CircleShape player(_SizePlayer);

wie ktoś co muszę zmienić w kodzie żebym mógł w pętli zmienić jego rozmiar?
3. SFML czasami nie wczytuje obrazków .png.

0
  1. Nigdy tego nie robiłem, ale wydaje mi się możesz wykorzystać wątki do osiągnięcia tego celu. Ale to nie jest raczej wymagane do napisania własnej gui-konsoli w tym samym okienku SFML-a.
  2. SetRadius (http://www.sfml-dev.org/documentation/2.0/classsf_1_1CircleShape.php)
  3. Na pewno domyślimy się dlaczego.
0

To może tak kod programu:

main.cpp

 
#include <SFML/Graphics.hpp>
#include <iostream>
#include "base.h"

int ViewW = (_WidthWindow /  2);
int ViewH = (_HeightWindow / 2);

sf::Texture _PTexture;
int main()
{
    sf::RenderWindow window(sf::VideoMode(_WidthWindow,_HeightWindow),"");
    std::cout<<"LOG: WINDOW CREATED"<<std::endl;

    sf::CircleShape player(_SizePlayer);
    std::cout<<"LOG: PLAYER CREATED"<<std::endl;

    _PTexture.loadFromFile( "Face.png" );
    std::cout<<"LOG: TEXTURE LOADED"<<std::endl;

    sf::View view(sf::Vector2f(_WidthWindow,_HeightWindow), sf::Vector2f(_WidthWindow,_HeightWindow));
    view.setCenter(ViewW,ViewH);
    view.setSize(_WidthWindow,_HeightWindow);


    player.setPosition(300,400);

    while(window.isOpen())
    {
        sf::Event event;
        while(window.pollEvent(event))
        {
            if( event.type == sf::Event::Closed ) {
                window.close();
                std::cout<<"LOG: WINDOW CLOSED"<<std::endl;
            }
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape ) {
                window.close();
                std::cout<<"LOG: WINDOW CLOSED"<<std::endl;
            }

            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::J ) {

                std::cout<<"LOG: CHANGE WINDOWS SIZE"<<std::endl;
            }
            if(event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::W)
                std::cout<<"LOG: PLAYER GO UP"<<std::endl;
            if(event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::S)
                std::cout<<"LOG: PLAYER GO DOWN"<<std::endl;
            if(event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::A)
                std::cout<<"LOG: PLAYER GO LEFT"<<std::endl;
            if(event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::D)
                std::cout<<"LOG: PLAYER GO RIGHT"<<std::endl;
        }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
                player.move(0, -0.2);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
                player.move(0, 0.2);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
                player.move(-0.2, 0);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                player.move(0.2, 0);

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::W)&& sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                player.move(-0.05, 0.05);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::W)&& sf::Keyboard::isKeyPressed(sf::Keyboard::A))
                player.move(0.05, 0.05);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::S)&& sf::Keyboard::isKeyPressed(sf::Keyboard::A))
                player.move(0.05, -0.05);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::S)&& sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                player.move(-0.05, -0.05);

        player.setOutlineColor(sf::Color::Red);
        player.setOutlineThickness(_OutlinePlayer);
        player.setTexture(&_PTexture);

        window.clear(sf::Color(200,230,160));
        window.setView(view);
        window.draw(player);
        window.display();
    }
    return 0;
}

base.h

 
#include <SFML/Graphics.hpp>
#include <conio.h>

#define NORMAL_WIDTH 800
#define NORMAL_HEIGHT 600
#define size_player 25

#define MAXIMAL_OUTLINE 2.0
#define NORMALL_OUTLINE 1.0
#define MINIMAL_OUTLINE 0.5
#define NO_OUTLINE 0.0
#define NEGATIVE_MINIMAL_OUTLINE -0.5
#define NEGATIVE_NORMALL_OUTLINE -1.0
#define NEGATIVE_MAXIMAL_OUTLINE -2


int _WidthWindow = NORMAL_WIDTH;
int _HeightWindow = NORMAL_HEIGHT;
int _SizePlayer = size_player;
int _OutlinePlayer = NORMALL_OUTLINE; 

Nie wiem dlaczego wyświetla się ten błąd podczas zmieniania obrazka.

2 problem rozwiązany.

Wiem, że można zrobić asynchroniczną konsolę za pomocą WinAPI ale u mnie to nie działa.
Ma ktoś poradnik do GUI w SFML?

1

"Nie znaleziono obrazka" najprawdopodobniej oznacza że ... nie znaleziono obrazka, bo nic tu "źle napisanego" w tej kwestii nie widze.

A co do GUI w SFML-u.... wystarczy napisać samemu odpowiednie klasy.
Ewentualnie jak Ci się naprawdę bardzo leni to możesz sprawdzić sobie to: http://sfgui.sfml-dev.de/
Ale nigdy z tego nie korzystałem, bo nie miałem potrzeby korzystania z czegoś takiego...

Do napisania GUI nie będzie ci potrzeba wielu rzeczy - głównie to tylko pozycja myszki, obsługa eventów, no i jakieś sf::Sprite czy co tam sobie wykorzystasz do grafik.

1 użytkowników online, w tym zalogowanych: 0, gości: 1