Ukrywanie paska na klawiszu X 3208 12

O temacie

Autor Sauron

Zaczęty 26.05.2013 roku

Wyświetleń 3208

Odpowiedzi 12

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy
Chcę zrobić, że po wciśnięciu klawisza X mój pasek albo się schowa albo się pokaże. Mam taki kod:

instance B_XP_Bar(GothicBar)
{
x = 100;
y = 20;
backTex = "Bar_Back.tga";
barTex = "Bar_Xp.tga";
};

func void XP_B()
{
var int XP_Bar;
if(!Hlp_IsValidHandle(B_XP_Bar))
{
XP_Bar = Bar_Create(B_XP_Bar);
};
Bar_SetMax(XP_Bar, (500*((hero.level+2)/2)*(hero.level+1)) - (500*((hero.level+1)/2)*(hero.level)));
Bar_SetValue(XP_Bar, hero.exp - (500*((hero.level+1)/2)*(hero.level)));

if(MEM_KeyState(KEY_X)==KEY_PRESSED){
if (XPBarState == 1)  
{  
Print("Pokazuję się");  
Bar_Show(XP_Bar);  
XPBarState = 0;  
}  
else  
{  
Print("Chowię się");  
Bar_Hide(XP_Bar);  
XPBarState = 1;  
};  
};
};

wywołanie:

FF_ApplyOnce(XP_B);
Napisy się wyświetlają, a pasek jak był tak jest... (zmienna XPBarState jest globalna)
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Z tym są problem, przesuń go poza ekran, prościej. Nie mam dostępu do swoich plików, bo jestem  na laptopie jak wejdę to pokażę jak ja usuwam paski.
 
Ż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

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy
Próbowałem przesunąć pasek na -100, -100, i zmienić alpha - nie dało rady...
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.


Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy
FF_ApplyOnce(XP_B);
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Napisz w temacie za godzinę, albo do mnie na GG 24180766, pokażę Ci swój kod, nie najlepszy, ale działa :ok:  (pisałem o tym już wcześniej :F  )
 
Ż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

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Z tego co widzę w dokumentacji LeGo, FF_ApplyOnce wywołuje funkcję tylko raz. Obecnie to zadziałałoby tylko gdybyś nacisnął przycisk X dokładnie w momencie włączania się skryptu. Ty chcesz żeby wykrywało go w dowolnym momencie gry. To oznacza że musisz sprawdzać ten warunek przez całą grę, ciągle, w każdej klatce. W tym celu trzeba użyć FF_Apply.
Przenieś tą część kodu do nowej funkcji:
if(MEM_KeyState(KEY_X)==KEY_PRESSED){
                if (XPBarState == 1)  
                {  
                        Print("Pokazuję się");  
                        Bar_Show(XP_Bar);  
                        XPBarState = 0;  
                }  
                else  
                {  
                        Print("Chowię się");  
                        Bar_Hide(XP_Bar);  
                        XPBarState = 1;  
                };  
        };
I tą nową funkcję zarejestruj za pomocą FF_Apply.

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
func void hide_bars()
{
FF_REMOVE(create_exp_bar);
Bar_Delete(ExpBar);
ExpBar = 0;
FF_REMOVE(create_stamina_bar);
Bar_Delete(staminabar);
staminabar = 0;
};
func void show_bars()
{
expbar = Bar_Create(expirience);
staminabar = Bar_Create(stamina_bar);
FF_Apply(create_exp_bar);
FF_Apply (create_stamina_bar);
};
Dość jasne powinno być, jak mówiłem, nie najlepsze, ale działa.
Ja ich nie ukrywam, ja je niszczę i tworzę na nowo, ich wartości są obliczane, jeśli tobie to nie odpowiada, zapisz je np. w AiVarze.
 
Ż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

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
To co ma Kamil wygląda ogólnie dobrze, z tym zastrzeżeniem które napisałem. Po prostu samo pokazywanie / ukrywanie musi być wykonywane co klatkę (jak u ciebie), nie jednorazowo (jak u niego). Musi podzielić funkcję na dwie i jedną wywoływać przez FF_ApplyOnce, a drugą przez FF_Apply.

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Z tego co pamiętam sama Lehona napisała (tak wiem, to facet, ale ma 'a' na końcu więc odmieniam jako ona), że bar_hide jest zbugowane, chociaż nie wiem jaka jest obecna wersja LeGo, ani której on używa.
 
Ż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

Sauron

Sauron

Użytkownicy
posty267
Propsy5
Profesjabrak
  • Użytkownicy

Sauron

Ukrywanie paska na klawiszu X
#10 2013-06-11, 19:20(Ostatnia zmiana: 2013-06-11, 19:50)
Mam wersję najnowszą (2.2.2 chyba).
Nie wiem jakim cudem wyświetlają się napisy, skoro funkcja rzekomo wywołuję się tylko raz... Sprawdzę metodę Sawik'a
EDIT: Dobra już rozumiem różnice między tymi dwiema funkcjami :D

EDIT2: Pewnie mam coś źle, ale efekt jest taki, że przy pokazywaniu się paska mam taką pętelkę i Gothic crash'uje (napis ciągle się pojawia)

func void XP_B()
{
if (XPBarState == 0) {
if(!Hlp_IsValidHandle(B_XP_Bar))
{
XP_Bar = Bar_Create(B_XP_Bar);
};

Bar_SetMax(XP_Bar, (500*((hero.level+2)/2)*(hero.level+1)) - (500*((hero.level+1)/2)*(hero.level)));
Bar_SetValue(XP_Bar, hero.exp - (500*((hero.level+1)/2)*(hero.level)));
};

};

func void Show_XPBar()
{
XP_Bar = Bar_Create(B_XP_Bar);
FF_Apply(Show_XPBar);
Print("Pokazuję się!");
XPBarState = 0;
};

func void Hide_XPBar()
{
FF_Remove(Show_XPBar);
Bar_Delete(XP_Bar);
Print("Chowię się!");
XPBarState = 1;  
};

func void ShowHide_XPBar()
{
if(MEM_KeyState(KEY_X)==KEY_PRESSED){
if (XPBarState == 1)  
{  
Show_XPBar();
}  
else  
{  
Hide_XPBar();
};  
};
};



// i przy starcie
FF_ApplyOnce(XP_B);
FF_Apply(ShowHide_XPBar);
 
Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Ukrywanie paska na klawiszu X
#11 2013-06-11, 20:25(Ostatnia zmiana: 2013-06-11, 20:47)
Twoje funkcje Show_XPBar i Hide_XPBar są złe. Nie mam pojęcia dlaczego akurat takie dziwaczne napisałeś. Zgaduję że ty też nie i że ich nie rozumiesz (jakaś sklejka? wtf?).

Tak z ciekawości: dlaczego wybrałeś taki dziwny identyfikator dla obiektu paska? Prefiks "B_" zwykle umieszczało się bodajże przy funkcjach zwracających true / false i nie wpływających na stan obiektów.

Do tego powinieneś wywalić z funkcji XP_B warunek (XPBarState == 0). Zamiast tego możesz co najwyżej od razu chować pasek. Ale stworzony być musi.

//edit: całkiem to zjebałeś, przecież masz gotowe funkcje Bar_Hide i Bar_Show :|
Zaraz dam przykład.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Ukrywanie paska na klawiszu X
#12 2013-06-11, 20:41(Ostatnia zmiana: 2013-06-11, 20:44)
var int expBar;
var int expBarVisible;

instance expBarInst(GothicBar)
{
x = 100;
y = 20;
};

func void initExpBar ()
{
    if(!Hlp_IsValidHandle(expBar))
{
expBar = Bar_Create(expBarInst);
expBarVisible = 1;
};
updateExpBar();
};

func void updateExpBar ()
{
Bar_SetMax(expBar, hero.exp_next);
Bar_SetValue(expBar, hero.exp);
};

func void expBarKeyListener()
{
        if(MEM_KeyState(KEY_X)==KEY_PRESSED)
{
                if (expBarVisible == 1)  
                {  
                        Bar_Hide(expBar);
expBarVisible = 0;
                }  
                else  
                {  
                        Bar_Show(expBar);
expBarVisible = 1;
                };  
        };
};
Rejestracja funkcji do wywołania, np w Init_Global:
FF_ApplyOnce(expBarInit);
FF_Aplly(expBarKeyListener);
Odświeżenie wartości na koniec B_GivePlayerXP:
updateExpBar ();
Oczywiście nigdy nie korzystałem z LeGo ani nie testowałem tego skryptu (jak żadnego innego już chyba od ponad dwóch lat), także musicie dokładnie sprawdzić i poprawić ewentualne błędy.


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