Postavi break point, pa ćeš viditi da nije.
Programiranje u C++-u - pitanja i odgovori
- poruka: 7.285
- |
- čitano: 1.712.244
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Razmisljam o tom C++ Builderu,dali je to dobro za pocetnika?
Nope, jer skoro pa nitko ne programira u tome.
Naravno da programira. Samo registriranih developera ima 2.1 milijun (po embarcaderovoj statistici), plus barem tri puta više ih koristi C++ Builder na crno. Još sada kada dođe podrška za android i ios itekako će postati puno popularniji.
I uopće nije loš za početnika. Brz je i jednostavan. No nema ga u besplatnoj verziji i to je svakako mana.
Pogledaj na SO broj pitanja tagiranih sa visual studio i tagiranih sa builder. naravno mozda je builder puno bolji pa ljudi sve sami skuze:P, ali omjer je ogroman.
Fireman pogledaj si boost asio ilia zeromq za socket komunikaciju... lakse ti je tako nauciti iz nekih rasirenihij frameworka nego ovako.
Tooo,hvala,napravio sam kvadratic koji mogu micat gore-dolje-ljevo-desno po slici.
Razmisljam o tom C++ Builderu,dali je to dobro za pocetnika?
Nope, jer skoro pa nitko ne programira u tome.
Naravno da programira. Samo registriranih developera ima 2.1 milijun (po embarcaderovoj statistici), plus barem tri puta više ih koristi C++ Builder na crno. Još sada kada dođe podrška za android i ios itekako će postati puno popularniji.
I uopće nije loš za početnika. Brz je i jednostavan. No nema ga u besplatnoj verziji i to je svakako mana.
Pogledaj na SO broj pitanja tagiranih sa visual studio i tagiranih sa builder. naravno mozda je builder puno bolji pa ljudi sve sami skuze:P, ali omjer je ogroman.
Naravno da je Visual Studio popularniji kada je gotovo svaka znanstvena ustanova Microsoft partner pa dobiju njihove proizvode besplatno te su isti dostupni učenicima/studentima također besplatno. No to ne znači da je VS najkvalitetniji (barem ako govorimo o C++u) jer VS za C++ se može koristiti tek za konzolne aplikacije pošto MFC je mrtav. S druge strane VCL (C++ Builder) se konstantno razvija i proširuje platforme.
VS je super za .NET no za C++... tek za učenje kroz konzolne aplikacije.
Razmisljam o tom C++ Builderu,dali je to dobro za pocetnika?
Nope, jer skoro pa nitko ne programira u tome.
Naravno da programira. Samo registriranih developera ima 2.1 milijun (po embarcaderovoj statistici), plus barem tri puta više ih koristi C++ Builder na crno. Još sada kada dođe podrška za android i ios itekako će postati puno popularniji.
I uopće nije loš za početnika. Brz je i jednostavan. No nema ga u besplatnoj verziji i to je svakako mana.
Pogledaj na SO broj pitanja tagiranih sa visual studio i tagiranih sa builder. naravno mozda je builder puno bolji pa ljudi sve sami skuze:P, ali omjer je ogroman.
Naravno da je Visual Studio popularniji kada je gotovo svaka znanstvena ustanova Microsoft partner pa dobiju njihove proizvode besplatno te su isti dostupni učenicima/studentima također besplatno. No to ne znači da je VS najkvalitetniji (barem ako govorimo o C++u) jer VS za C++ se može koristiti tek za konzolne aplikacije pošto MFC je mrtav. S druge strane VCL (C++ Builder) se konstantno razvija i proširuje platforme.
VS je super za .NET no za C++... tek za učenje kroz konzolne aplikacije.
Meanwhile in 2012:
http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-479T
http://channel9.msdn.com/Events/Windows-Camp/Developing-Windows-8-Metro-style-apps-in-Cpp/
Meanwhile in 2012:
Joj, metro. A aplikacije sa normalnim GUI-em? Zar nije WindowsForms latest&greatest po tom pitanju (pokopao MFC), a zar dotični nije također i usko vezan za .net?
Sve to već odavno dostupno u C++ Builderu
A te se aplikacije i dalje pokreću gdje? U desktopu. Metro aplikacije su sasvim nešto drugo.
Kako da napravim efekt skoka?
Probao sam ovako ali cini se da je prebrzo :D
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
std::cout << "Up arrow pressed\n";
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
break;
}
Dali postoji neka delay funkcija ili slicno?
Postoji, ali ako to tako budeš napravio, cijeli program će se zaustaviti dok se animacija skoka ne završi.
Pravi način bi bio da kada korisnik pritisne tipku "gore" ti liku dodjeliš akceleraciju prema gore, i svakom idućom iteracijom petlje ti pomičeš lika prema gore za akceleraciju. Onda dodaš varijablu gravitacija, koja svakim korakom umanjuje akceleraciju tako da će nakon nekog vremena kada lik bude gore akceleracija biti 0 i onda će ići polako u minus što će dovesti do padanja lika nakon skoka.
To ti je već uvod u osnovnu fiziku za igre :)
Ne zaboravi da se iteracije tvoje game petlje odvijaju u fiksnim vremenskim razmacima. Znači ako ti se igra odvija u 25 FPS-a, to znači da ti imaš 1000/25=40, tj 40 milisekundi razmak između iteracija. A to onda znači da imaš način za mjerenje protoka vremena.

E pa vrati na ono :)

Kako misliš? Pa moraš imati nekakvu petlju s fiksnim vremenskim korakom
Zasad nemam.
Zasad nemam.
Probaj ovako nešto, to sam sada preradio jednu petlju sa onog teksta koji sam ti linkao:
const int UPDATE_FPS = 25,
SKIP_TIME = 1000/UPDATE_FPS,
MAX_FRAMESKIP = 10;
int main()
{
unsigned int next_loop_time, loops;
sf::Clock clock;
sf::Time current_time;
current_time=clock.getElapsedTime();
next_loop_time=current_time.asMilliseconds();
while (/*game running*/)
{
loops=0;
current_time=clock.getElapsedTime();
while (current_time.asMilliseconds()>next_loop_time && loops<MAX_FRAMESKIP);
{
//update game
next_loop_time+=SKIP_TIME;
loops++;
current_time=clock.getElapsedTime();
}
//draw game
}
return 0;
}
Tamo gdje sam komentirao "game running" ide neki uvjet (varijabla) kojom prekidaš izvođenje igre.
Tamo gdje se nalazi "update game" čitaš input sa tipkovnice, računaš AI pokrete, fiziku...
Tamo gdje se nalazi "draw game" crtaš to sve na ekran
EDIT: prepravljena verzija
#include <chrono>
#include <thread>
#include <iostream>
#include <SFML/Graphics.hpp>
#include <stdio.h>
const int UPDATE_FPS = 25,
SKIP_TIME = 1000/UPDATE_FPS,
MAX_FRAMESKIP = 10;
int main()
{
unsigned int next_loop_time, loops;
sf::Clock clock;
sf::Time current_time;
current_time=clock.getElapsedTime();
next_loop_time=current_time.asMilliseconds();
sf::VideoMode VMode (800, 600, 32);
sf::RenderWindow Window(VMode, "Game", sf::Style::Default);
sf::Texture Platform;
sf::Texture Player;
if(!Platform.loadFromFile("pf.jpg"))
return 1;
if(!Player.loadFromFile("player.jpg"))
return 1;
sf::Sprite Sprite;
sf::Sprite Sprite2;
Sprite.setTexture(Platform);
Sprite2.setTexture(Player);
Sprite2.setPosition(0.f, 450.f);
while (Window.isOpen()) // Gameloop
{
sf::Event Event;
while (Window.pollEvent(Event))
{
switch (Event.type)
{
case sf::Event::Closed: Window.close(); break;
case sf::Event::MouseButtonPressed: std::cout << "Mouse button pressed" << std::endl; break;
//case sf::Event::KeyPressed: sf::Keyboard::Right; std::cout << "Right button pressed" << std::endl; break;
default: break;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
std::cout << "Right arrow pressed\n";
Sprite2.move(7, 0);
break;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
std::cout << "Left arrow pressed\n";
Sprite2.move(-7, 0);
break;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
std::cout << "Up arrow pressed\n";
Sprite2.move(0, -7);
break;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
std::cout << "Down arrow pressed\n";
Sprite2.move(0, 7);
break;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{
std::cout << "Escape button pressed\n";
Window.close();
break;
}
}
//Window.clear(sf::Color(0, 255, 255));
Window.draw(Sprite);
Window.draw(Sprite2);
Window.display();
}
}
Neznam kako da implementiram ovaj loop,tj zasebno iscrtavanje i ovo ostalo(tipke,AI..)
Neznam kako da implementiram ovaj loop,tj zasebno iscrtavanje i ovo ostalo(tipke,AI..)
Evo ti nešto da proučavaš i da se igraš:
#include <iostream>
#include <SFML/Graphics.hpp>
#include <stdio.h>
const int UPDATE_FPS = 25,
SKIP_TIME = 1000/UPDATE_FPS,
MAX_FRAMESKIP = 10;
int main()
{
int next_loop_time, loops, jumping=0;
float gravity=0.1; //snaga gravitacije
sf::Clock clock;
sf::Time current_time;
sf::VideoMode VMode(800, 600, 32);
sf::RenderWindow Window(VMode, "Game", sf::Style::Default);
sf::Event event;
sf::Texture Platform;
sf::Texture Player;
if (!Platform.loadFromFile("pf.png"))
return 1;
if (!Player.loadFromFile("player.png"))
return 1;
sf::Sprite Sprite;
sf::Sprite Sprite2;
Sprite.setTexture(Platform);
Sprite.setPosition(0.f, 482.f);
Sprite2.setTexture(Player);
Sprite2.setPosition(384.f, 450.f);
float x_speed=0, y_speed=0;
sf::Vector2f speed(0.f, 0.f);
current_time=clock.getElapsedTime();
next_loop_time=current_time.asMilliseconds();
while (Window.isOpen()) // Gameloop
{
loops=0;
while (clock.getElapsedTime().asMilliseconds()>next_loop_time && loops<MAX_FRAMESKIP)
{
while (Window.pollEvent(event))
{
if (event.type==sf::Event::Closed)
Window.close();
}
//Citanje tipki sa tipkovnice//////////////////////////////////////////////
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
speed.x=7;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
speed.x=-7;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
if (!jumping) //mozemo skakati samo ako vec nismo u skoku
{
speed.y=-7;
jumping=1;
}
}
//if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
//nista ne radimo jer ne mozemo ici dolje kroz pod
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
Window.close();
//Fizika///////////////////////////////////////////////////////////////////
//jesmo li trenutno u skoku?
if (jumping)
{
//provjerimo jesmo li doskocili na pod
if (Sprite2.getPosition().y>450.0f)
{
Sprite2.setPosition(Sprite2.getPosition().x, 450.0f);
jumping=0;
speed.y=0;
}
//ako nismo onda smo i dalje u zraku, moramo uzeti gravitaciju u obzir
else
{
speed.y+=gravity;
}
}
//da ne izademo iz ekrana sa lijeve strane
if (Sprite2.getPosition().x+speed.x<0)
{
speed.x=-(Sprite2.getPosition().x);
}
//da ne izademo iz ekrana sa desne strane
if (Sprite2.getPosition().x+Sprite2.getLocalBounds().width+speed.x>800)
{
speed.x=800-Sprite2.getPosition().x-Sprite2.getLocalBounds().width;
}
//pomicemo lika i resetiramo horizontalnu brzinu kako ne bi "klizali"
Sprite2.move(speed);
speed.x=0;
next_loop_time+=SKIP_TIME;
loops++;
}
Window.clear(sf::Color(0, 255, 255));
Window.draw(Sprite);
Window.draw(Sprite2);
Window.display();
}
}
Da bi ti sve štimalo moraš iskoristiti i ove slike za spriteove (staviš ih tamo gdje držiš i ostale slike za spriteove, ove moje su u .png formatu)
I nemoj se navikavati na ovo, neću pisati kod umjesto tebe ubuduće. Nisam znao kako da ti drukčije sve to pokažem u cjelini pa zato ovaj kod. Kretnje nisu posve glatke zato što nedostaje interpolacija, ali nemoj s time još razbijati glavu.
Kako da napravim efekt skoka?
Probao sam ovako ali cini se da je prebrzo :D
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
std::cout << "Up arrow pressed\n";
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, -1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
Sprite2.move(0, 1);
break;
}
Dali postoji neka delay funkcija ili slicno?
http://wiki.allegro.cc/index.php?title=How_to_implement_jumping_in_platformers
@rustweaver Hvala puno,samo ne kuzim ovo //jesmo li doskocili na pod (pod if,gravitaciju kuzim) i ovo izlazenje sa ekrana.
Pa prvo se provjeri jesi li u skoku. Ako jesi onda provjeriš trenutnu "visinu" (tj. gdje se nalaziš na Y osi), ako je visina veća od razine poda (znači ako smo malo propali u pod) postavljamo lika na visinu poda, i prekidamo fazu skakanja (jumping=0) tako označavamo da više nismo u skoku. Ako nam je visina manja od poda (upamti da je [0,0] u gornjem lijevom kutu) onda znači da smo još uvijek u zraku pa samo dalje primjenjujemo utjecaj gravitacije.
A što se ovog izlaženja iz ekrana tiče. To jednostavno blokira lika da ne može izaći lijevo i desno iz ekrana. Ako ti i dalje nije jasno, obriši te dijelove pa ćeš vidjeti.
A zasto se na tom izlazenju uzima speed u obzir?
I zasto imam warninge,unused variable x i y_speed?
A zasto se na tom izlazenju uzima speed u obzir?
Moraš razmišljati u koracima kojima se petlja izvršava.
speed.x ti je za koliko će se piksela lik pomaknuti na idućem pomicanju. Mi prije tog pomicanja provjeravamo gdje će se lik nalaziti nakon tog pomaka, ako će izaći iz ekrana onda ga blokiramo.
To ti ide ovako:
- Pritisnuli smo strjelicu lijevo: brzina x se postavlja na -7 (znači pomaknut ćemo se ulijevo za 7 piksela na idućem pomicanju)
- Provjerimo hoće li trenutna pozicija lika + njegova brzina biti izvan ekrana, ako hoće smanjujemo brzinu kako ne bi izašli iz ekrana
- Pomičemo lika za zadanu brzinu
I zasto imam warninge,unused variable x i y_speed?
Zato što ih nitko ne koristi :D
Dižeš frku bez razloga, do sada si trebao naućiti što su unused varijable :D
Prije sam njih koristio za brzinu, ali sam onda otkrio SFML-ov vektor koji mi se učinio zgodnijim, ali sam zaboravio izbrisati ove varijable. Eto, ti imaš čast to učiniti.

Ja sam ju isto mislio uzeti, ali mi je 300 kn puno tako da ću je uzeti drugi mjesec. Zanima me ako bi se dalo dosta naučite iz te knjige i jednom kada bi ju naučio ako bi mogao reči da znam programirati u c++ ? Pošto namjeravam druge godine upisati neki računalni fakultet mislim da sada nije prerano početi malo učiti tako da imam prednost nad drugima
Ja sam ju isto mislio uzeti, ali mi je 300 kn puno tako da ću je uzeti drugi mjesec. Zanima me ako bi se dalo dosta naučite iz te knjige i jednom kada bi ju naučio ako bi mogao reči da znam programirati u c++ ? Pošto namjeravam druge godine upisati neki računalni fakultet mislim da sada nije prerano početi malo učiti tako da imam prednost nad drugima
Što se tiče samoga jezika C++, knjiga je dosta dobra po tome. Ako ti je nezgodno plaćati cijenu knjige, onda radije uzmi neku drugu knjigu, najbolje besplatnu. Danas imaš masu kvalitetnih knjiga pod cc licencom. Ovdje imaš neke:
http://freecomputerbooks.com/langCppBooks.html
Osobno bih ti preporučio knjigu Thinking in C++ . To je vrlo dobra i kvalitetna knjiga, a usudio bih se reći i u nekim segmentima kvalitetnija od Demistificiranog c++-a. Usto je besplatna. Razdijeljena je na 2 dijela.
Vol 1:
http://freecomputerbooks.com/Thinking-in-Cpp-Volume-One.html
Vol 2:
http://freecomputerbooks.com/Thinking-in-Cpp-Volume-Two.html
Ja sam ju isto mislio uzeti, ali mi je 300 kn puno tako da ću je uzeti drugi mjesec. Zanima me ako bi se dalo dosta naučite iz te knjige i jednom kada bi ju naučio ako bi mogao reči da znam programirati u c++ ? Pošto namjeravam druge godine upisati neki računalni fakultet mislim da sada nije prerano početi malo učiti tako da imam prednost nad drugima
Meh, steta ti bacati lovu na knjigu jer ako si kao ja i 99% ostalih ljudi neces procitati ni 50 stranica prije nego odustanes.
Dakle za pocetak prvo prodi neke osnovne tutoriale, ako ti se bas svidi onda uzmi recimo od bjarnea(kada izade, trenutno izdanje je C++98) The C++ Programming Language 4th edition
Ima li mozda neki dobar tutorial kako napraviti collision u SFML-u?