Reinstalirao sam Windowse i instalirao C::B + MinGW ali kad Build and Run SFML program,dodje mi error
da mi fali ovaj file: libgcc_s_dw2-1.dll
Reinstalirao sam Windowse i instalirao C::B + MinGW ali kad Build and Run SFML program,dodje mi error
da mi fali ovaj file: libgcc_s_dw2-1.dll
Jesi li ti to naknadno skidao MinGW?
A odakle si skinuo SFML? Daj mi točan link.
Popravio.
Da, sve je jasno. Ta verzija SFML-a je buildana sa DW2 verzijom MinGW-a, pa ima dependancy na DW2 inačicu libgcc-a. Trebao bi rebuildati SFML sa SJLJ verzijom MinGW-a, pa bi se riješio tog dependencyja. Ili statički linkati libgcc sa SFML-om.
Imaš čak i Code Blocks workspace za kompajliranje SFML-a pa ne bi trebao biti prevelik problem, možeš se okušati u tome. Da naučiš nešto novo. :D
Popravio.
Što si popravio? Radi ti program? Kako si riješio?
Trebao sam staviti taj dll u mapu sa programom,sad imam jedan problem,pisem SFML program po tutorialu i dobivam ovaj error:
C:\Users\David\Dropbox\C++\SFMLTutorial1\main.cpp|31|error: 'class sf::RenderWindow' has no member named 'PollEvent'|
Sve druge clanove ima samo ne to,probao sam i sa malo p,ista stvar.
Radim po ovom tutorialu:
Trebao sam staviti taj dll u mapu sa programom
To je jasno, ali imaš jedan bezrazložan dependency kojeg se možeš riješiti.
sad imam jedan problem,pisem SFML program po tutorialu i dobivam ovaj error:
C:\Users\David\Dropbox\C++\SFMLTutorial1\main.cpp|31|error: 'class sf::RenderWindow' has no member named 'PollEvent'|
Sve druge clanove ima samo ne to,probao sam i sa malo p,ista stvar.
Ti imaš SFML 1.6, tutorial je očito pisan za verziju 2.0
http://www.sfml-dev.org/documentation/1.6/classsf_1_1RenderWindow.php
http://www.sfml-dev.org/documentation/2.0/classsf_1_1RenderWindow.php
Pogledaj članove u obje verzije...
Sta da sad napravim?
Skini SFML 2.0 i njega koristi umjesto verzije 1.6
Sad nisam dobio 2.0 external libraryes.
Sad nisam dobio 2.0 external libraryes.
Evo ja sam buildao SFML za tebe:
To je sada valjda to...
#include <stdio.h>
#include <time.h>
main(){
long start=clock(), i=0;
while (clock()-start<1000) {
if (clock()-start-1000./60*i>=1000./60){
printf("%i\n",++i);
}
}
}
Ovako:
http://www.koonsolo.com/news/dewitters-gameloop/
Kao što ćeš iz tog linka vidjeti glavna petlja nije baš toliko jednostavna stvar koliko se možda na prvi pogled čini. Imaš obrađena 4 različita pristupa od najjednostavnijeg do najkompliciranijeg. Savjetujem ti da sav taj tekst pročitaš i nekoliko puta ako treba.
#include <chrono>
#include <thread>
#include <iostream>
int main()
{
auto start_time=std::chrono::high_resolution_clock::now();
uint64_t iter=0;
while (true)
{
iter++;
std::this_thread::sleep_until(start_time + iter * std::chrono::nanoseconds(1000*1000*1000/60));
}
}Uoci da je ovo sleep_until, a ne sleep_for, dakle mozes raditi nesto u petlji i i dalje ce se izvrsavati 60 x u sekundi, naravno ako ti traje predugo ostatak petflje onda si u problemima :)
@Zoidberg
Dobivam error:
'std::this_thread' has not been declared|
@Zoidberg
Dobivam error:
'std::this_thread' has not been declared|
#define _GLIBCXX_USE_NANOSLEEP /* ukucaj ovako , ako prođe thread moglo bi biti problema s chrono */
#include <chrono>
#include <thread>
#include <iostream>
/*
code...
*/
/*
može ti pomoći i ne mora , ne znam koji compiler
vrtiš , verziju itd..
ako je mingw uključi podršku za C++0X
btw ovo je c++11 standard koji nema full implementaciju
u svim kompajlerima te stoga imaš taj error
probaj ovako
*/
Opet isto,ukljucio sam podrsku za C++0x jer bez toga nisam mogao compilat,vodilo me u neki library.
evo kod ako ce pomoci:
#include <chrono>
#include <thread>
#include <iostream>
#include <SFML/Graphics.hpp>
#define _GLIBCXX_USE_NANOSLEEP /* ukucaj ovako , ako prođe thread moglo bi biti problema s chrono
int main()
{
sf::VideoMode VMode (800, 600, 32);
sf::RenderWindow Window(VMode, "Game", sf::Style::Fullscreen);
auto start_time=std::chrono::high_resolution_clock::now();
uint64_t iter=0;
while (Window.isOpen()) // Gameloop
{
iter++;
std::this_thread::sleep_until(start_time + iter * std::chrono::nanoseconds(1000*1000*1000/60));
}
}
Opet isto,ukljucio sam podrsku za C++0x jer bez toga nisam mogao compilat,vodilo me u neki library.
evo kod ako ce pomoci:
#include <chrono>
#include <thread>
#include <iostream>
#include <SFML/Graphics.hpp>
#define _GLIBCXX_USE_NANOSLEEP /* ukucaj ovako , ako prođe thread moglo bi biti problema s chrono
int main()
{
sf::VideoMode VMode (800, 600, 32);
sf::RenderWindow Window(VMode, "Game", sf::Style::Fullscreen);
auto start_time=std::chrono::high_resolution_clock::now();
uint64_t iter=0;
while (Window.isOpen()) // Gameloop
{
iter++;
std::this_thread::sleep_until(start_time + iter * std::chrono::nanoseconds(1000*1000*1000/60));
}
}
#define _GLIBCXX_USE_NANOSLEEP
// molim te stavi kako sam ti naveo
// u kodu ovaj define na vrh prije include std-a
// to je za moguce porbleme s chrono ako prodje thread
#include <chrono>
#include <thread>
#include <iostream>
#include <SFML/Graphics.hpp>
imam osjećaj da si na mingw
ako je tako da li je bundle verzija na bin verziji Code::Blocksa
Ako je tako onda ti gcc 4.4.1 koliko se sjećam , nisam doma
da vidim pa pišem prilično napamet.
Uglavnom ta verzija bi mogla imat kroz -std+= C++0X thread.
Daj netko neka provjeri , možda fireman radi nešto krivo
u pozadini.
Pošto me nema doma , ja ne mogu.
Koristim MinGW i Code::Blocks(MinGW koj sam dobio sa C::B).
C++0x sam prije ukljucio jer nisam mogao compilat,dalo bi mi da je tu error:
#error This file requires compiler and library support for the upcoming \
ISO C++ standard, C++0x. This support is currently experimental, and must be \
enabled with the -std=c++0x or -std=gnu++0x compiler options.
#endif
Sad sam napravio ovako:
#include <chrono>
#include <thread>
#include <iostream>
#include <SFML/Graphics.hpp>
const int FRAMES_PER_SECOND = 25;
const int SKIP_TICKS = 1000 / FRAMES_PER_SECOND;
DWORD next_game_tick = GetTickCount();
int sleep_time = 0;
int main()
{
sf::VideoMode VMode (800, 600, 32);
sf::RenderWindow Window(VMode, "Game", sf::Style::Fullscreen);
sf::Texture Platform;
if(!Platform.loadFromFile("platform.jpeg"))
return 1;
sf::Sprite Sprite;
Sprite.setTexture(Platform);
//auto start_time=std::chrono::high_resolution_clock::now();
//uint64_t iter=0;
while (Window.isOpen()) // Gameloop
{
next_game_tick += SKIP_TICKS;
sleep_time = next_game_tick - GetTickCount();
if( sleep_time >= 0 ) { Sleep( sleep_time ); }
sf::Event Event;
}
}
Errori:
C:\Users\David\Dropbox\C++\SFMLGame\main.cpp|9|error: 'DWORD' does not name a type|
C:\Users\David\Dropbox\C++\SFMLGame\main.cpp||In function 'int main()':|
C:\Users\David\Dropbox\C++\SFMLGame\main.cpp|31|error: 'next_game_tick' was not declared in this scope|
C:\Users\David\Dropbox\C++\SFMLGame\main.cpp|32|error: 'GetTickCount' was not declared in this scope|
C:\Users\David\Dropbox\C++\SFMLGame\main.cpp|33|error: 'Sleep' was not declared in this scope|
C:\Users\David\Dropbox\C++\SFMLGame\main.cpp|35|warning: unused variable 'Event'|
||=== Build finished: 4 errors, 1 warnings ===|
Dodaj
#include <windows.h>
Hvala radi.
Sad imam problem,evo kod za otvaranje slike:
sf::Texture Platform;
if(!Platform.loadFromFile("pf.jpeg"))
return 1;
sf::Sprite Sprite;
Sprite.setTexture(Platform);
Pise da nemoze otvoriti a slika je u mapi sa programom.
Tko zna koji ti je working directory od programa. Pobaj staviti punu putanju (ono, tipa "c:\igra\slike\slika.jpg")
EDIT: Zaboravih, morat ćeš stavljati dvostruki backslash jer će ti jednostruki biti interpretiran kao escape sekvenca
dakle onaj gornji primjer bi trebao ići "c:\\igra\\slike\\slika.jpg"
Postavi debugger pa vidi gdje je problem.
Program se gasi na ucitavanju slike,u konzolu ispise da je nemoze otvoriti.
Program se gasi na ucitavanju slike,u konzolu ispise da je nemoze otvoriti.
Puna putanja?