Autor Wątek: Famework---Jak zaprojektować???  (Przeczytany 7856 razy)

Offline Elminster

  • Użytkownik

# Lipiec 14, 2006, 14:30:20
Mam pewien program renderuje weksportowaną geometrie z max-a, efekt mgły, system cząstek, ruchy kamerą itp, taki malutki "Famework", tylko problem w tym ze mam to wszystko w jednym source files, chciałbym to rozbic na mniejsze części(tworzenie okna do jednego, system cząstek do drugiego itp.). Tylko zabardzo nie wiem jak sie to robi czy moze miałby ktoś jakiś tutek, artykuł albo podobny "famework"(tylko zeby nie był zabardzo skomplikowany), myślałem o klasach tylko na obiektowo orientowym programowaniu sie zabardzo nieznam....z góry dzieki....i sory za błędy....

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

puchname

  • Gość
# Lipiec 14, 2006, 14:40:30
"tylko na obiektowo orientowym programowaniu sie zabardzo nieznam" - czas sie zapoznac ;p

Offline mi-ku

  • Użytkownik
    • miku DevBlog

# Lipiec 14, 2006, 16:03:26
Przeczytaj sobię art "Building an Advanced Particle System" Johna Van Der Burga. Mi ten art pomógł zrozumieć pewne apekty programowania zorientowanego obiektowo głównie polimorfizm i przy okazji sobie o systemach cząsteczek poczytasz :)
Art jest w różnych miejscach, na gamasutrze tutaj: http://www.gamasutra.com/features/20000623/vanderburg_01.htm w pdf tu: http://www.mysticgd.com/misc/AdvancedParticleSystems.pdf

puchname

  • Gość
# Lipiec 14, 2006, 16:49:36
Maikeru: o ile dobrze zrozumialem Elmister nie zna za bardzo programowania obiektowego, nie wydaje mi sie zeby w takich sytuacji warto bylo czytac taki tekst, ja polecam raczej dobra ksiazke o c++.

Offline nameczanin

  • Użytkownik
    • devlog

# Lipiec 14, 2006, 17:56:28
nie czaje tego:
Cytuj
w jednym source files
, po przetlumaczeniu na PL, brzmi jak:
Cytuj
w jednym zrodlowych plikach
:EEEE... Gosc wie o czym pisze w ogole?

Cytuj
myslalem o klasach
- znaczy, ze co... Zastanawiales sie co to jest, ta? Tak wnioskuje z tego:
Cytuj
tylko na obiektowo orientowym programowaniu sie zabardzo nieznam

No, dobra, teraz skoncze z analiza Twojej wypowiedzi pod wzgledem stylistycznym (mam jeszcze duzo rzeczy do przegadania jak zwykle :ASD)


Cytuj
chciałbym to rozbic na mniejsze części(tworzenie okna do jednego, system cząstek do drugiego itp.)
to... zrob to? Odpowiednie funkcje, metody, klasy (o ile to w C++, a nie C) poprzerzucaj do osobnych plikow. Dodaj te pliki do projektu w Twoim kompilatorze i skompiluj? :D
Powiedz mi (albo innym, bo mnie juz nie bedzie pewnie, wyjazd), czy Ty w ogole umiesz uzyc ten framework?
Chyba ze chodzi Ci o logiczne rozlozenie, to ja preferuje mniej wiecej takie moduly:
    window
    graphics
    input
    sound
    ew.net
Niemal jak w DirectX (osobiscie nie robie tak do konca Oo)

Czego by tu sie jeszcze przed wyjazdem czepic...
O!
Cytuj
z góry dzieki....i sory za błędy....
nie ma za co, i tak nie rozumiem nic z Twojej wypowiedzi, czego Ty chcesz.

Do innych, ktorzy to czytaja: wydaje mi sie, ze ten user chcialby robic gre, ale zauwazyl, ze taka wiedze wszyscy besztaja, to napisal 'framework'. Nie wiem czy ja jestem niepowazny, czy naprawde niektorzy ulomni (mialem w klasie jednego goscia, co jak tlumaczyles mu cos, to on swoje wiedzial, przytakiwal, komentowal, ale co do czego, to pusto - a nigdy lyso, bo mama nauczycielka w szkole - mu bylo. Bulwersuja mnie tacy ludzie, nie chce mi sie nawet wiecej opisywac tego :F)

Pzdr. for all
Cytuj

EDIT 1: poprawilem quote
EDIT 2: i od puchacza (to Ty, puchname, nie?) idac, jeszcze poradze Ci, Elmister, tak samo jak on - rzeczywiscie naucz sie C lub C++ (i zadne Delphi, bo sie nauczysz klasc buttony na oknie i na tym sie skonczy, pojawia sie kolejne lamerskie pytania :[), zanim zaczniesz ogladac TAKIE kody zrodlowe (najmniejszy gotowy framework to nie byle co).
« Ostatnia zmiana: Lipiec 14, 2006, 17:59:27 wysłana przez nameczanin »

Offline TeMPOraL

  • Użytkownik
    • devBlog

# Lipiec 15, 2006, 08:30:59

    window
    graphics
    input
    sound
    ew.net

Dorzuciłbym do tego Logger i jakiś error/debug system albo narzędzia [asserty, takie tam] - ale nie każdy lubi takie rzeczy ;)).

A jak już mowa o podziale na więcej plików, to zanim zapytasz na jakie i czemu się to nie kompiluje, to przeczytaj sobie ten krótki ale rzeczowy artykuł z GameDev.net
http://www.gamedev.net/reference/articles/article1228.asp
//aczkolwiek ja jestem zwolennikiem ujmowania CAŁEGO headera w blok #ifndef - endif, a nie tylko jego części.

Pozdrawiam,
TeMPOraL.

Offline zarius

  • Użytkownik

# Lipiec 15, 2006, 10:55:10
Moze C# latwiejszy na poczatek :o ?

Ja aktualnie pisze framework i o wiele mi to latwiej przychodzi niz w C++. Poza tym jak chcialem robic ten C++'owy framework to zatrzymalem sie praktycznie na poczatku (po zarzadzaniu oknem i tworzeniu DX'a ;p) chodzilo oczywiscie o zarzadzanie zasobami (chcialem to jakos zautomatyzowac a za bardzo nie wiedzialem jaki system zastosowac ;p)

No a w C# sa Eventy i wszystko mozna ladnie pieknie "wypluwac" a framework (narazie w teorii bo nad tym pracuje ;) ) bedzie robil all automatycznie.

Takie podejscie jest jako tako opisane w artykule do ktorego zamieszczam link:
http://www.c-unit.com/tutorials/mdirectx/?t=30

Jest tez wersja tych tutkow do C++ wiec pewnie jakis framework tez jest zrobiony ale nie zaglebialem sie w to od kad probuje opanowac C# ;)

Pozdro

PS: Co do tego:
Cytuj
window
graphics
input
sound
ew.net

Ja zawsze inaczej dzielilem:

Okno, Graphics, GUI, SOCKETY ;)

Narazie o dzwieku pojecia nie mam a sieciowa gra mi sie sni wiec wiecie ;p... no ale trwam w tym celu juz od 2,5 roku i wciaz sie edukuje zawziecie ;p

Offline Esidar

  • Użytkownik

# Lipiec 15, 2006, 18:02:33
http://www.gamedev.net/reference/articles/article1228.asp

To jest dobry przykład, żeby nie wierzyć ślepo wszelkim artykułom.
#define SCREENX = 640
Pomijając fakt, że nie jestem zwolennikiem #define, ta konstrukcja jest bardzo słaba. Znak '=' czyni tą definicję bezużyteczną, chyba, że chce się zrobic takie dziwactwo:
int x SCREENX;
a z pewnością eliminuje, chociażby takie użycie:
int x = offset + SCREENX;
Ale i tak lepiej jest mieć 2 zmienne do których można wpisać dowolne wartości bez konieczności kompilowania.

Drugim błędem jest
#infdef MadeIncludes
...
...
#define MadeIncludes
#endif

taką definicję można łatwo rozłożyć za pomocą:
// globals.h
#infdef MadeIncludes
...
#include "globals.h"

#define MadeIncludes
#endif

Ponadto warto korzystać z udogonień i jeśli się używa kompilatora MS, to wystarczy użyć #pragma once.

Użycia globalnych zmiennych nawet nie będę komentować.

To nie był dobry przykład na organizowanie sobie kodu. Dziwnym jest, że takie coś znalazło się na GameDev.net.


Offline TeMPOraL

  • Użytkownik
    • devBlog

# Lipiec 15, 2006, 21:58:11
W sumie masz rację, aczkolwiek wydawało mi się, że gdzieś widziałem lepszy artykuł - tylko go odnaleść nie mogłem ;/. Chodziło mi przede wszystkim o zwrócenie uwagi na - i tak źle napisaną - konstrukcję #ifndef - #define - #endif. Czyli - nie wierzmy wszystkiemu, co się czyta.

Nie zgodzę się jednak, że lepszym rozwiązaniem jest używanie #pragma once. Jest to rozwiązanie dla kompilatorów M$, przez co nieprzenośne i nie należy raczej do dobrych zwyczajów programistycznych. Dlatego preferuję #ifndef / #endif. #define oczywiście powinno być od razu po #ifndef. Faktycznie, tą konstrukcję można rozłożyć odpowiednio dobranymi #undef'ami, itp. ale w ten sam sposób możesz zrobić np. NULL-ową referencję. Da się, tylko po co sobie samemu szkodzić?

Heh.. ja się wycofuję z przytoczenia tego artykułu - faktycznie nie przyjżałem się mu dokładniej (czytałem go dawno temu, teraz go tylko szybciutko odnalazłem) - różne głupoty w nim są widze. Zmiennych globalnych nie skomentuję.

Pozdrawiam,
TeMPOraL.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Lipiec 15, 2006, 22:22:13
Zmiennych globalnych nie skomentuję.
Co prawda w większych projektach lepiej ich unikać, ale zmienne globalne są fajne w przypadku nauki programowania, niewielkich projektów i gier na compo, a że spora część Warsztatu się jeszcze łapie pod któryś z dwóch pierwszych przypadków, to aż tak bym tych globali nie krytykował. Wystarczy powiedzieć, żeby się nikt do globali nie przyzwyczajał zbytnio. Przykład: mój brat miał na studiach przedmiot z podstaw programowania, na którym zaciekle zwalczano zmienne globalne. Efekt był taki, że studenci przekazywali wszystkie potrzebne zmienne jako parametry i wiele funkcji miało tych parametrów po kilkanaście. :)

Offline nameczanin

  • Użytkownik
    • devlog

# Sierpień 04, 2006, 05:32:05

    window
    graphics
    input
    sound
    ew.net

Dorzuciłbym do tego Logger i jakiś error/debug system albo narzędzia [asserty, takie tam] - ale nie każdy lubi takie rzeczy ;)).
Mialem to dodawac tam wtedy, ale wylecialo mi z glowy :E

PS: Co do tego:
Cytuj
window
graphics
input
sound
ew.net

Ja zawsze inaczej dzielilem:

Okno, Graphics, GUI, SOCKETY ;)

Narazie o dzwieku pojecia nie mam a sieciowa gra mi sie sni wiec wiecie ;p... no ale trwam w tym celu juz od 2,5 roku i wciaz sie edukuje zawziecie ;p
dzielilem tak samo kiedys jak ty, ale pozniej stwierdzilem, ze w framework'u bardziej GRAFICZNYM, na cholere mi jakas wielka obsluga okna _-_, Mam mozliwosc ustawiania pewnych jego parametrow (tytul, rozmiar, bool fullscreen, odswiezanie ewentualnie) przed czyms w stylu engine->run(); w ktorym jest petla :E Dlatego zrezygnowalem z jakiegos "Okna". GUI opracowywalem, ale nie kodzilem.

A zmienne globalne sa dobre - w C.
« Ostatnia zmiana: Sierpień 04, 2006, 05:38:55 wysłana przez nameczanin »