Warsztat.GD

Społeczność => Projekty zaawansowane => Wątek zaczęty przez: Frondeus w Wrzesień 21, 2012, 17:18:55

Tytuł: Gravity!
Wiadomość wysłana przez: Frondeus w Wrzesień 21, 2012, 17:18:55
Gravity! (http://warsztat.gd/projects/gravity_wsoc)

Postanowiłem kontynuować projekt po 2 letniej przerwie.

Co się zmieniło?
1. Silnik - zamiast robić własny bubel postanowiłem użyć gotowego Unity3D 4.6. Warto było. Znacznie ułatwia prace nad grą, w szczególności najnowszy system GUI. Pozwala mi myśleć nad gameplayem a nie zajmować się podstawowymi problemami.
2. Pomysł na menu - zrezygnowałem z oddalanego menu na rzecz zwykłego. Jednakże być może w przyszłości dodam coś pomiędzy. Np. mapę systemu słonecznego jako sposób na wybór poziomu.
3. Dynamizm - z racji synchronizacji wielu elementów z aktualnie granym utworem gra jest nieco bardziej dynamiczna. Cały czas nad tym pracuję aby gracz nie poczuł się znudzony.
4. Muzyka - sama muzyka też została zmieniona. Obecnie korzystam z elektronicznej znalezionej w internecie, lecz trwają prace nad własnymi kawałkami ;)
5. Grafika - obecnie pracuję nad trochę innym stylem graficznym. Całość nie jest jeszcze spójna ale na pewno poprawię jeszcze. Grafika ma być minimalistyczna. Zależy mi na prostych kształtach i kolorach. Być może wybiorę grafikę wektorową.
6. Target - tym razem celuję w urządzenia mobilne. Całość testuję na Nexusie 7.

GIF przedstawiający najnowsze zmiany (http://www.gfycat.com/GargantuanBraveHochstettersfrog)

Pomysł gry oraz prace do czasu reaktywacji projektu opisałem na stronie
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Wrzesień 21, 2012, 22:55:56
Proszę o male wsparcie techniczne:
Czy gra chodzi, na jakim komputerze, głownie jaka karta graficzna i ewentualnie jakie errory w log.txt :>
Bo zauważyłem ze na kartach ATI coś nie zawsze działa (nie czyta glsl 330 mimo ze np. odpala me3 na średnich (czyli pixelshader 3.0 powinien mieć)).
Aktualnie nie ważne. Obniżyłem do 2.1
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Kuba D. w Wrzesień 22, 2012, 00:03:01
Może zamiast obniżać wymagania sprzętowe wyjaśnił byś o co chodzi w grze ? W paru słowach chociażby ?
Bo wybacz, ściągnąłem, widzę coś co ma być ciałem niebieskim, przybliżyłem, oddaliłem i ..urwiony puściłem magiczną kobimnację alt+F4.
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Wrzesień 22, 2012, 07:58:50
Racja. W grze chodzi o zestrzelenie wszystkich gwiazdek na danym poziomie, przy użyciu jak najmniejszej ilości pocisków. Oczywiście na drodze stoją przeszkody w postaci np asteroid które ściągają pociski. Poziomów będzie więcej niż jeden i na początku będzie można wybierać. Na chwile obecna jest jeden poziom testowy, rodzaj tutoriala.

Choc muszę dodać mini info jak go włączyć bo to sprawia duże problemy:

- Po włączeniu gry nie jest wybrany żaden poziom.
- Poziomy w trybie pauzy sa oznaczone kołkiem z nazwa poziomu.
- Wybrany poziom jest oznaczony poprzez kręcące się kolko.
- Odpauzowac gre można poprzez przybliżenie kamery. Przybliżenie kamery bez wybrania poziomu nic nie daje.

- LPM aby wystrzelić rakietę. Im dłużej trzymasz LPM tym większa będzie miała szybkość.
- PPM aby przesunąć kamerę.
- SPM aby zrestartować kamerę (przydatne jeśli się "zgubimy")

Postaram się dodać wyjaśniające napisy jak włączyć grę w trybie pauzy.
Zauważyłem tez problemy z myszka, nie zawsze wychwytuje klikniecie, ale jestem w trakcie naprawiania tego problemu.

Obniżyłem wymagania gdyż wiele osób skarżyło się ze nie mogą odpalić gry (np na zintegrowanym Intelu ;P)

Tytuł: Odp: Gravity!
Wiadomość wysłana przez: programistagd w Wrzesień 23, 2012, 16:55:08
Jeśli ktoś będzie chciał, zrobię paczkę dla linuxa!
Miło by było :)
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Wrzesień 23, 2012, 20:08:21
 Download  (https://www.dropbox.com/s/foel1ode36sww7x/Alpha.zip)
Zmiany:
Obecnie zabieram sie za eliptyczne orbity, możliwość ustawienia satelity satelit (czyli np planeta krążąca wokół słońca, a wokół planety księżyc :) ) oraz zapis postępów gracza do pliku.
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Wrzesień 25, 2012, 21:25:04
Dodałem:
Nastepne w liscie TODO:

Link ten co ostatnio (patrz poprzedni post). Zasadniczo mimo aktualizacji link się nie zmienia (Potęga dropboxa :P). Enjoy!
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 10:02:49
Nowa paczka (https://www.dropbox.com/s/foel1ode36sww7x/Alpha.zip)

Ostateczna wersja na WSoC. Poprawiłem SPM, nowy system tweeningu, wersja release :D
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: jjoker8 w Październik 10, 2012, 13:41:55
nie da sie strzelać. aciskam lpm i nic
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 15:16:30
Wieżyczka się obraca, nie wykorzystałeś wszystkich szans i po naciśnięciu LPM nic nie następuje?
Ciekawe... Sprawdze co poszło nie tak ;)
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: jjoker8 w Październik 10, 2012, 15:27:56
wieżyczka się nie obraca i nic nie strzela
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 15:41:49
Przybliżyłeś widok? W lewym górnym rogu pisze pauza?

Jeśli przybliżyłeś to mam problem z klawiatura i myszą.
Jeśli nie - To muszę poprawić podpowiedzi :)
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: jjoker8 w Październik 10, 2012, 15:42:58
przybliżyłem, pauzy nie ma, jest różowa armatka i się nie rusza. Tylko ppm działa- można przesuwać mapę
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 15:46:17
O cholera, tego się nie spodziewałem. W pliku Log.txt nie ma żadnych errorów?

Zaraz włączę drugi komputer i sprawdzę na XP, bo u mnie wszystko działa.
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: MaxGarden w Październik 10, 2012, 15:52:26
U mnie na 2 poziomie (te 2 gwiazdki) po trafieniu w jedną gra się crashuje.
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 15:53:55
Ups, przez przypadek podałem stara wersje, już się wysyła nowa z poprawionymi gwiazdkami (i mam nadzieje ze myszka tez).

Klik! (https://www.dropbox.com/s/foel1ode36sww7x/Alpha.zip) Wersja poprawiona :)
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: jjoker8 w Październik 10, 2012, 16:03:06
no ja mam xp właśnie :P. zawartość log.txt:

###### NEW GAME ######
..\Render.cpp(resize,19) INFO: Resize: 800 , 600
..\Render.cpp(resize,19) INFO: Resize: 800 , 600
..\Game.cpp(loadContent,67) INFO: Opengl 2.1
..\Game.cpp(loadContent,72) INFO: Opengl 3.0
..\Script.cpp(addAim,44) INFO: Aim R: 0

###### END GAME ######
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: MaxGarden w Październik 10, 2012, 16:06:39
Nowa wersja działa ;).
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: jjoker8 w Październik 10, 2012, 16:12:17
nie u mnie :(, still to samo
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 16:16:47
Zaintrygowałeś mnie. Pierwszy raz spotykam się takim błędem, a już trochę testowałem ta grę na rożnych komputerach. Byc może w kodzie gdzieś mam babola, albo to glfw sobie nie radzi z Twoim komputerem :P
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Raptor w Październik 10, 2012, 16:21:58
Albo mi się wydaje, albo nie ma żadnej zależności prędkości od czasu, jest tylko od ilości klatek :P Na początku po uruchomieniu mam do 1600 FPS, potem systematycznie spada. Gwiazdki zasuwają tak że nie da się ich trafić, w np drugim etapie (satelitarnie?) meteory wokół gwiazdek krążą z taką prędkością, że wygląda to tak, jakby cały czas było 5-6 tych meteorów :P
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 16:34:58
Heh?

const float Min_Step = 0.017;
Time time;
while (game.Run) {

time.dt = glfwGetTime() - time.realtime;
time.realtime += time.dt;

if (time.dt > 0.1) time.dt = 0.1;
if (time.dt < 0) time.dt = 0;

game.grabInput();

while (time.dt > Min_Step)
{
game.update(time);
time.dt -= Min_Step;
}
if (time.dt > 0)
{
game.update(time);
}

if (game.Run) game.render(time);
}
Nic nowego, potem w kodzie wszędzie mam:
bodies[i]->V.x += bodies[i]->a.x * dT;
bodies[i]->V.y += bodies[i]->a.y * dT;
Gdzie a to przyspieszenie a dT to Min_Step.
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Raptor w Październik 10, 2012, 16:40:08
Dobra, nie wiem jak to wytłumaczyć. W każdym bądź razie im więcej FPSów, tym szybciej wszystko zasuwa. Pokazać jak to wygląda za bardzo nie mam jak, Fraps nagrywa bodajże do 120 FPSów, chyba że nagram telefonem/kamerą :P
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Radarek w Październik 10, 2012, 16:53:48
Czemu masz w pętli
game.update(time);

a nie
game.update(Min_Step);
?

I końcowy update wyglądałby wtedy tak:
game.update(time.td);
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Raptor w Październik 10, 2012, 16:57:25
Zrobiłbym edycję, ale pojawił się już następny post :)
Jakość marna bo nagrane telefonem, ale pokazuje problem:
https://www.dropbox.com/s/gxuy9nyj44oja0v/2012-10-10%2015.47.48.mp4
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 17:15:51
I have no idea what i did xD
Przekazywałem time po czym go nie używałem O_o.

Ok poprawiłem, kompiluje i zaraz będzie paczuszka :)
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 17:27:42
Link co ostatnio. Powinno być już ok.
Co do sterowania nie mam pojęcia i chyba nie naprawie na czas :C
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: MaxGarden w Październik 10, 2012, 17:41:32
 Póki pokazuje się "poradnik" to jest dobrze, ale jak napisy znikają to gwiazdka tak zapierdala, że nie można w nią trafić.
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 17:50:22
Damn. Wzor na przyspieszenie powinien chyba wygladac:
V += a * dt * dt;
zamiast
V += a * dt;
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Kos w Październik 10, 2012, 18:01:34
Dlaczego? Przyspieszenie to pierwsza pochodna prędkości, tak jak prędkość jest pierwszą pochodną pozycji.

Pokaż jak poprawiłeś tę pętlę główną?
Tytuł: Odp: Gravity!
Wiadomość wysłana przez: Frondeus w Październik 10, 2012, 19:17:47
const float Min_Step = 0.017; // czyli okolo 1/60
Time time;
while (game.Run) {

time.dt = glfwGetTime() - time.realtime;
time.realtime += time.dt;

if (time.dt > 0.1) time.dt = 0.1;
if (time.dt < 0) time.dt = 0;

game.grabInput();

while (time.dt > Min_Step)
{
game.update(Min_Step);
time.dt -= Min_Step;
}
if (time.dt > 0)
{
game.update(time.dt);
}

if (game.Run) game.render();
}


Dalej w game.update(dt):
c_time.time += dt; //Te c_time jest potrzebne dla tweenera kamery.
if (!Paused)
{
time.time += dt; //Te time jest potrzebne dla tweenera cząsteczek itp.
if (level)
update_level(dt);
}
A w update_level(dT):

bodies[i]->V.x += bodies[i]->a.x * dT;
bodies[i]->V.y += bodies[i]->a.y * dT;
glm::vec2 v = glm::vec2(0.0f);
Body* p = bodies[i]->parent;
while (true)
{
if (p == nullptr)
break;
v += p->V;
p = p->parent;
}
v += bodies[i]->V; //Dzieki temu ciala kraza po orbitach innych cial.
bodies[i]->sprite.setPosition(bodies[i]->sprite.position + (v * dT));