Zakres ważności 1690 8

O temacie

Autor kolot17

Zaczęty 17.04.2015 roku

Wyświetleń 1690

Odpowiedzi 8

kolot17

kolot17

Użytkownicy
posty41
Propsy1
ProfesjaGracz
  • Użytkownicy
Jaki jest zakres ważności funkcji i zmiennych ? Czy mogę napisać sobie funkcje gdziekolwiek i potem odwoływać się do niej w innym pliku. Czy może mam stworzyć plik gdzie umieszczę ów funkcje ?
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Nie możesz odwołać się do zmiennych lub wywołać funkcje przed ich zadeklarowaniem/stworzeniem.
Jeśli zmienna będzie w funkcji ( tzw. zmienna lokalna ), to nie możesz jej użyć poza funkcją ( chyba, że Ikarusem ).
A jeśli poza funkcją ( tzw. zmienna globalna ), to możesz użyć gdziekolwiek.

kolot17

kolot17

Użytkownicy
posty41
Propsy1
ProfesjaGracz
  • Użytkownicy
Dzięki, i sorki za takie głupie pytania :D Czyli tak naprawdę język dużo się nie różni od C++
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Różni, bo w C++ masz coś takiego jak forward declarations które służą właśnie temu żeby móc używać różnych rzeczy przed ich zdefiniowaniem. W Daedalusie musisz zachować ścisły porządek.

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Można też wywołać funkcję niezależnie od jej miejsca.
Niestety jak zawsze, podstawowe skrypty tego nie umożliwiają.
func void TestFunc() {
    MEM_CallByID(MEM_GetFuncID(MyFunc));
};

func void MyFunc() {
    Print("test");
};


chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

Zakres ważności
#6 2015-04-17, 18:38(Ostatnia zmiana: 2015-04-17, 18:51)
Cytuj
Chicken, takie coś na pewno się sparsuje?
Tak.

Cytuj
 (co innego gdybyś wsadził tam stringa "MyFunc").
Można tak:
func void TestFunc() {
    MEM_CallByString("MyFunc");
};
func void MyFunc() {
    Print("test");
};

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Chicken, sprawdzałeś czy można z tego korzystać jak z delegatów? 
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

Zakres ważności
#8 2015-04-20, 10:02(Ostatnia zmiana: 2015-04-20, 16:08)
Chyba można, ale skrzydła nie dam.
Będę w domu, to dam znać.
Edit:
O ile się nie mylę, to będzie tak szło:
func int addInt(var int x, var int y) {
return x + y;
};

func int subInt(var int x, var int y) {
return x - y;
};

func void delegate(var int x, var int y) {};

func void MainFunc() {
MEM_ReplaceFunc(delegate, addInt);

var int res;

MEM_PushIntParam(5);
MEM_PushIntParam(3);

MEM_CallByString("delegate");
res = MEM_PopIntResult();

Print(IntToString(res)); // Output: 8
};


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry