![](https://forum.gmclan.org/uploads/set_resources_5/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
Utermiko
-
Postów
796 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Odpowiedzi opublikowane przez Utermiko
-
-
To nie bug. To ficzer.
A tak na serio to sprawdzaj alarmy.
GMLif (distance_to_object(obj_hero) < 40) && (otwarte == false) && alarm[1]<=0{
y -= 4;
if (ruch == true)
{
alarm[0] = 10;
ruch = false;
}
}
if (distance_to_object(obj_hero) > 40) && (otwarte == true) && alarm[0]<=0
{
y += 4;
if (ruch == true)
{
alarm[1] = 10;
ruch = false;
}
}
-
Bo to jest technologia .Not
Tyle, że to nie jest nawet w najmniejszym stopniu śmieszne :P
Nie musisz publicznie przedstawiać swojego wstrętu do MS. (w następnym poście fervi napisze M$).
Ja tam nie wiem co Compi chce, ale z tego co wiem to planuje port na Linuksa, a tam MonoW jaki sposób chcesz to osiągnąć? Pod Mono da się odpalić binarki C++/CLI?
-
Jak patrzę na gameplay to widać, że ogromny postęp zrobiłeś. Daj tego healthbara trochę niżej i jakąś animację jak monetkę się zbierze.
-
Ja proponuję, byś napisał to w .Not 2.0, bo:
- Większość ma Not 2.0
- Kopatybilny z Mono
- .Not 4.0 / 4.5 to 8'ka lub update 7'ki
Fervi
Tyle, że .NET 2 w porównaniu do .NET 4 ma bardzo małe możliwości. To nie tylko rozszerzenie o kilka klas.
Do tego po co używać przestarzałego oprogramowania skoro i tak nieliczne osoby używają win 2000 i starsze systemy.
.NET 4 to xp, vista, 7 i 8.
.NET 4.5 to 7 i 8 (i vista jeszcze chyba)
.NET 4.5 jest i tak tylko rozszerzeniem 4 o parę przydatnych klas i innych dupereli. CLR dalej jest ten sam.
To jest napisane w C++/CLI, a Mono chyba tego nie obsługuje.
Jak chcesz to się baw w portowanie na Mono. Dołączyłem source przecież.
PS. Jak piszesz "Not" to nie jesteś fajny.
@EDIT Compi, tak z ciekawości. Po co Ci LPVOID? Jakieś specyficzne zastosowanie?
Na językach zarządzanych wskaźniki przydają się wg. mnie tylko przy importowaniu natywnych dlli.
-
Ale ferviemu nie chodziło o własny silnik, tylko o klona GM'a
-
one są od góry , ogólnie powiem z lotu ptaka .
chyba raczej od przodu
-
@Utermiko
Chociażby BSD.
Fervi
Raczej chodziło mi o klony windowsowych aplikacji.
Pamiętaj, że EnigmaGM w pewnym momencie może zrównać się z GM'em i opracowywać własne funkcje (np. lepszy MultiPlayer czy multiplatformowe biblioteki)Fervi
Wtedy to już będzie oddzielny produkt. Klony zazwyczaj są zgodne z oryginałami.
-
@Fervi Widziałeś kiedyś klona przewyższającego możliwości oryginału który dalej się rozwija?
-
Czemu nie wrzucisz na yt? 20 mb to nie dużo.
-
Najlepiej integer.
Jeśli to będzie string to niech zwraca wskaźnik
@EDIT:
Ten argument w dotnet_method to string?
char*gm to traktuje jako string
źle zrozumiałem.
gml sprawdza czy dałeś tam ty_real czy ty_string i wywołuje odpowiednią funkcję z dll'a
Po prostu wpisujesz ty_real bądź ty_string, w zależności jaki typ jest zwracany, tak jak przy definiowaniu zwykłych dll (external_define) w gm.
Obczaj zresztą skrypt ;p
@EDIT Tak wgl to sprawdzałeś czy działa w slapie ten dla GM'a?@@EDIT:Stary, nawet nie wiesz jak ci dziękuję. Teraz Slap będzie mógł korzystać z .NET Frameworka :)
Czyli działa? :)
@EDIT Skończyłem :D
Link: https://gmclan.org/up8194_3_DotNetSlapCrossover1_0.html
W środku binarki dla .NET 4 oraz 4.5, source oraz przykłady. Testowałem importowanie funkcji przez P/Invoke w c# bo już mnie denerwowało cpp ;p (czyli zarządzany program odwoływał się do mieszanej biblioteki która z kolei odwoływała się do dynamicznie ładowanego, zarządzanego dll)
Dodałem więcej typów do wykorzystania(kwestia dopisania paru linijek). Poniżej lista typów oraz ich odpowiedników w .NET.
Nie zapomniałem oczywiście o LPVOID. W .NET to System.IntPtr.
char* to System.String.(tego też nie ma w tej tabelce)
Tutaj taka lista co możesz zaimportować (wycinek z kodu):
//######################### //AUTHOR OF DLL: Utermiko # //######################### #define EXPORT extern "C" __declspec(dllexport) EXPORT int LoadDll(char* path); EXPORT int CreateObject(int assemblyId, char* namespaceAndClass); EXPORT int RemoveObject(int objectId); EXPORT int ClearArguments(); EXPORT int AddStringArgument(char* value);//System.String EXPORT int AddCharArgument(char value);//System.SByte EXPORT int AddUCharArgument(unsigned char value);//System.Byte EXPORT int AddDoubleArgument(double value);//System.Double EXPORT int AddFloatArgument(float value);//System.Float EXPORT int AddIntArgument(int value);//System.Int32 EXPORT int AddUIntArgument(unsigned int value);//System.UInt32 EXPORT int AddShortArgument(short value);//System.Int16 EXPORT int AddUShortArgument(unsigned short value);//System.UInt16 EXPORT int AddLongArgument(long value);//System.Int64 EXPORT int AddULongArgument(unsigned long value);//System.UInt64 EXPORT int AddLPVOIDArgument(LPVOID value);//System.IntPtr EXPORT char* InvokeStringMethod(int objectId, char* methodName);//System.String EXPORT char InvokeCharMethod(int objectId, char* methodName);//System.SByte EXPORT unsigned char InvokeUCharMethod(int objectId, char* methodName);//System.Byte EXPORT double InvokeDoubleMethod(int objectId, char* methodName);//System.Double EXPORT float InvokeFloatMethod(int objectId, char* methodName);//System.Float EXPORT int InvokeIntMethod(int objectId, char* methodName);//System.Int32 EXPORT unsigned int InvokeUIntMethod(int objectId, char* methodName);//System.UInt32 EXPORT short InvokeShortMethod(int objectId, char* methodName);//System.Int16 EXPORT unsigned short InvokeUShortMethod(int objectId, char* methodName);//System.UInt16 EXPORT long InvokeLongMethod(int objectId, char* methodName);//System.Int64 EXPORT unsigned long InvokeULongMethod(int objectId, char* methodName);//System.UInt64 EXPORT LPVOID InvokeLPVOIDMethod(int objectId, char* methodName);//System.IntPtr
@EDIT Nie zapomnij użyć "ClearArguments" przed dodawaniem argumentów do wywołania innej metody. Najczęściej na tym można się złapać :P
@EDIT2 Jeszcze jedno. Przy "LoadDll" trzeba podawać PEŁNĄ ścieżkę.
@EDIT3 Nie testowałem wszystkich funkcji Invoke... i Add... , ale powinny działać.
-
Domyślnie zwracać int'a czy double (tzn. czy coś się udało/nie udało. w gm'ie trzeba było double z wiadomych przyczyn)?
-
Obydwie binarki z LPVOID i int
Dobra postaram się zrobić.
LPVOID to z tego co wyczytałem IntPtr w .NET.
@EDIT Jaki limit argumentów? ;p
-
Ok
Bardzo bym prosił :)
Znaczy chodzi Ci o binarkę .NET 4 czy inne typy danych? xd
-
Nie ma nic w stylu Canvasa w HTML5?
Jeżeli chodzi o twoją dllkę, to powiedz mi, czy argumenty są układane na stosie w stylu stdcall?
Jeśli tak to nic nie trzeba przerabiać :)
Źródła są dołączone. Zresztą spójrz na skrypty w gml jak wywoływana jest funkcja i spokojnie przeniesiesz to na Slapa.
Gdybyś potrzebował innych typów niż char* i double to pisz.
Jak chcesz mogę już od razu skompilować binarkę na .NET 4, bo 4.5 nie ma na XP.
Konkretnie to najpierw czyścisz listę z argumentami (ClearArguments), wrzucasz po kolei argumenty funkcjami "AddStringArgument" i "AddRealArgument", później wywołujesz "StringMethod" lub "RealMethod" (w zależności co zwraca) i voila.
-
Pamiętaj, żeby zmieniać tylko sprite obiektu, a nie tworzyć kilka obiektów z różnymi sprite i kopiować kod :).
-
Tylko w zwykłym GM'e jest możliwość używania dlli - natywnych, napisanych w np. w c++.
Jak chcesz używać dlli napisanych w c# (i ogólnie .NET'owych) to możesz użyć mojego dlla: DotNetGMCrossover.
To taka przejściówka między kodem zarządzanym a niezarządzanym dla GM'a.
-
Wiem, ale imo nie pasuje. Dałbym coś mniej "realistycznego".
Czy ja wiem... Wg. mnie jest ok.
Może ewentualnie dodaj możliwość wyboru wyglądu gracza.
-
Bohatera już dodał
-
Ustaw maskę bohatera w sprite na kwadratową, żeby postać się między ścianami nie blokowała.
@EDIT @Up szybszy ;d
-
nowa postać i pasek życia , https://gmclan.org/up6167_6_Fare_new_health...__new_Hero.html mam nadzieję że lepiej wam się teraz podoba :)
Tak jak poprzednicy, proponowałbym dać go nad głową bohatera, nieco zmniejszyć i dać na zielono/czerwony kolor w zależności ile ma hp.
-
Nie wkuwaj na pamięć. To największy błąd.
Korzystaj z dokumentacji i podpowiedzi z edytora. Szybciej tak sobie przyswoisz.
-
A no racja. Myślałem, że draw_healthbar pozwala tylko na rysowanie ze zmiennej "health" :P
-
Rozwiązanie Threefa jest chyba bardziej precyzyjne. Przecież są funkcje takie jak point_direction i point_distance.
W dodatku trafienie w sam środek jest nie możliwe (zawsze trafiam na obrzeża czerwonego kółka). Zwiększ room_speed zamiast większej ilości przeskakiwanych pixeli przez tą kreskę.
-
Mała podpowiedź: wykorzystaj draw_rectangle
Wpisanie string do system()
w C, C++
Opublikowano
Do łączenia stringów używamy +.
>> jest przeciążonym operatorem dla klasy cin, a << dla cout.