Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0]Stoper

Ostatnio zmodyfikowano 2014-05-17 23:06
Autor Wiadomość
GGG205
Temat założony przez niniejszego użytkownika
» 2014-05-16 21:52:33
Odświeżam.
P-110160
colorgreen19
» 2014-05-16 22:21:16
zmien moze troche system. Zrób w klasie timer wewnętrzny czas i do funkcji przekazuj czas obiegu jednej pętli
internal_time += elapsed;
 i zrób warunek
C/C++
if( internal_time.asSeconds() >= seconds( 2.f ) )
{
    internal_time = Time::Zero;
    return true;
}
moze to podziała
P-110162
pekfos
» 2014-05-17 20:46:50
Do aktualnego kodu: Co wypisuje ten cout w Timer() i co jeszcze używa tego zegara? Najlepiej podaj cały kod związany z tym stoperem.
P-110211
GGG205
Temat założony przez niniejszego użytkownika
» 2014-05-17 22:53:04
To więc tak. Kiedy timer wrzucam do pliku main restartuje się. Ale kiedy dam funckje z tymi npc to nie ma restartu. Więc colorgreen na razie zostanę przy tym moim bo mam nadzieję :). @pekfos:
1.Cout wypisuje liczby od 1-6 odlicza i po 6 sekundach wykonuje się akcja losowego poruszania, ale liczy dalej 7,8,9 i tak dalej. Jeśli wrzucę do main.cpp i ustawię by odliczał np do 10 wykonuje akcje i resetuje zegar tak jak tego chcę.
2.Raczej nic, ale dam kod, gdzie używana jest ta funkcja.
C/C++
void Character::move( float elapsed, ADDON_CHAR STYLE_MOVE, Game cDown )
{
    //CanMove = true;
    //if(CanMove == true)
    //{
    switch( STYLE_MOVE )
    {
    case RANDOM_MOVE:
       
        if( cDown.Timer( 6 ) == true )
        {
            int process =( rand() % 2 ) + 1;
            if( process == 1 )
                 DIR = static_cast < DIRECTIONS >( rand() % 4 );
            else
            {
                if( DIR == LEFT )
                     velocity.x -= 1;
                else if( DIR == RIGHT )
                     velocity.x += 1;
                else if( DIR == UP )
                     velocity.y -= 1;
                else if( DIR == DOWN )
                     velocity.y += 1;
               
            }
           
        }
        break;
    }
   
    SPRplayer.setTextureRect( IntRect( frame * 32, DIR * 48, 32, 48 ) );
    SPRplayer.move( velocity.x * elapsed, velocity.y * elapsed );
   
    pos.x = SPRplayer.getPosition().x;
    pos.y = SPRplayer.getPosition().y;
    //}
}

3.Cały kod ze stoperem
Game.h
C/C++
#ifndef GAME_H
#define GAME_H

#include <SFML\Graphics.hpp>

using namespace sf;

class Game
{
private:
    Clock clock;
    float timer;
public:
   
    bool Timer( float time );
};

#endif
Game.cpp
C/C++
#include <SFML\Graphics.hpp>
#include <iostream>
#include "Game.h"

bool Game::Timer( float time )
{
    timer = clock.getElapsedTime().asSeconds();
    std::cout << timer << std::endl;
    if( timer >= time )
    {
        clock.restart();
        return true;
    }
    else return false;
   
   
   
    return false;
}

Tylko tyle
P-110236
pekfos
» 2014-05-17 22:58:48
C/C++
void Character::move( float elapsed, ADDON_CHAR STYLE_MOVE, Game cDown )
Przekazujesz stoper przez wartość.
P-110238
GGG205
Temat założony przez niniejszego użytkownika
» 2014-05-17 23:04:59
To mam dać & ?

@EDIT

Tak działa. Dzięki.
P-110240
pekfos
» 2014-05-17 23:06:48
Sprawdź..? Skoro przez wartość jest źle, to dużo więcej możliwości nie masz.
P-110241
1 « 2 »
Poprzednia strona Strona 2 z 2