Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[PAMOKA] Kuriame meniu.


rokasma

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4150 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki visi, tokios pamokos nemačiau, na o jei ji ir yra tai nieko tokio manau :).

Kas yra ir kaip atrodo menu žaidime?

sa-mp-059-11a898b.png

Menu pawn'e.

Meniu atrodo labai sudėtinga ir sunku sukurti daugeliui žaidėjų, nors taip nėra. Čia aš jums parodysiu, kaip sukurti paprastą meniu. Šiuo atveju kursime teleport menu.(Šiuos meniu galima naudoti kioskų kūrimui, parduotuvėse ir t.t.)

Pirmi žingsniai

Pirmiausia mes turime sukurti meniu. Priešdėlis prieš Meniu: tai daro kintama tinkamo tipo [yra įvairių rūšių skirtingoms reikmėms, pavyzdžiui, Float: bool: Text3D: ir t.t.]

Įterpiame šią eilutę po #include, #define, forward ir t.t.

new Menu:teleportmenu;

Gerai, mes sukūrėme kintamąjį saugoti meniu. Dabar mes turime sukurti meniu ir priskirti kintamąjį mūsų sukurtajam meniu.. Tai rašome į OnGameModeInit ():

teleportmenu = CreateMenu("Teleportmenu", 2, 200.0, 100.0, 150.0, 150.0);

Dabar šiek tiek apie CreateMenu argumentus.

CreateMenu(title, columns, Float:x, Float:y, Float:col1width, Float:col2width);

\

title:				 Meniu pavadinimas

columns:	 	 Numeris apibrėžia kiek stulpelių yra [2 yra maksimalu]

Float:x:		 Aukščio padėtis ekrane, kuriame bus menu.[iš kairės į dešinę.]

Float:y:	 Pločio pozicija [aukštyn ir žemyn]

Float:col1width: Pirmo stulpelio plotis

Float:col2width: Antro stulpelio plotis

Pridedame meniu punktų

Gerai, dabar mes turime meniu, bet mums reikia punktų kurios pasirinksime musu meniu saraše.

Pridėsite juos po CreateMenu kaip darėme ankščiau:

AddMenuItem(teleportmenu, 0, "LS");
AddMenuItem(teleportmenu, 0, "LS");
AddMenuItem(teleportmenu, 0, "SF");
AddMenuItem(teleportmenu, 0, "SF");
AddMenuItem(teleportmenu, 0, "LV");
AddMenuItem(teleportmenu, 0, "LV");

AddMenuItem(teleportmenu, 1, "Grove Street");
AddMenuItem(teleportmenu, 1, "Starfish Tower");
AddMenuItem(teleportmenu, 1, "Wheel Arch Angels");
AddMenuItem(teleportmenu, 1, "Jizzys");
AddMenuItem(teleportmenu, 1, "4 Dragons");
AddMenuItem(teleportmenu, 1, "Come-a-Lot");

AddMenuItem paaiškinimai:

AddMenuItem(menuid, column, text);

menuid: Kuriame meniu turi būti rodomas punktas/prekė.
column: Kuriame stulpialyje turi būti rodomas punktas/prekė.[Nepamirškite, kad yra tik 2]
text: Punkto prekės pavadinimas [Pvz. Geležinkelio stotis SF. (Taip parašiau, nes šiuo atveju kuriame teleportą.)]

Daugiau apie AddMenuItem

Elemento/punkto/prekės poveikis

Gerai, dabar mes sukūrėme pilną menu su punktais/prekėmis. Taigi kas atsitiks kai mes pasirinksime viena iš jų? Mano pavyzdyje mes norime sukurti teleport menu. Taigi mes turime nuteleportuoti žaidėją kai jis pasirenka punktą.(Pvz. Geležinkleio stotis SF.).

Kai žaidėjas pasirenka meniu elementą mūsų scriptui reikalingas callback'as public OnPlayerSelectedMenuRow(playerid, row)

Geriausias būdas tai padaryti yra padaryti su jungikliu, tai kaip keli if statements, patikrinti ar kintamasis yra verta tam tikros vertybės.

Bet pirmiausia mes norime priskirti poveikius tik šiam menu, todėl mes turime sukurti kintamąjį, kad kuri meniu žaidėjas žiūri, tai daroma su "GetPlayerMenu":

new Menu:CurrentMenu = GetPlayerMenu(playerid);

Dabar, kai kas nors pasirenka kažką iš meniu, menuid turi būti išsaugotas 'CurrentMenu':

if (CurrentMenu == teleportmenu)
{
...
}

Dabar tarp šių skliaustelių yra "jungiklis", jis patikrina kokį punktą/prekę mūsų žaidėjas pasirinko arba "eilutę", tai gali būti padaryta su if statements patikrinimu kas tai per eilutė, bet "jungiglis" yra daug paprastesnis.

if(CurrentMenu == teleportmenu)
{
switch(row)
{
 case 0: //Grove Street
 {
	 SetPlayerPos(playerid, 2493.9133, -1682.3986, 13.3382);
	 SetPlayerInterior(playerid, 0);
	 SendClientMessage(playerid, 0xFFFFFFFF, "Jus buvote nuteleportuotas į Grove Street");
 }
 case 1: //Starfish Tower
 {
	 SetPlayerPos(playerid, 1541.2833, -1362.4741, 329.6457);
	 SetPlayerInterior(playerid, 0);
	 SendClientMessage(playerid, 0xFFFFFFFF, "Jus buvote nuteleportuotas į Starfish Tower viršunę");
 }
 case 2: //Wheel Arch Angels
 {
	 SetPlayerPos(playerid, -2705.5503, 206.1621, 4.1797);
	 SetPlayerInterior(playerid, 0);
	 SendClientMessage(playerid, 0xFFFFFFFF, "Jus buvote nuteleportuotas į Wheel Arch Angels tuning-parduotuvė";
 }
 case 3: //Jizzys
 {
	 SetPlayerPos(playerid, -2617.5156, 1390.6353, 7.1105);
	 SetPlayerInterior(playerid, 0);
	 SendClientMessage(playerid, 0xFFFFFFFF, "Jus buvote nuteleportuotas į Jizzy's Nightclub!");
 }
 case 4: //4Dragons
 {
	 SetPlayerPos(playerid, 2028.5538, 1008.3543, 10.8203);
	 SetPlayerInterior(playerid, 0);
	 SendClientMessage(playerid, 0xFFFFFFFF, "Jus buvote nuteleportuotas į Four Dragons Casino");
 }
 case 5: //Com-a-Lot
 {
	 SetPlayerPos(playerid, 2169.1838, 1122.5426, 12.6107);
	 SetPlayerInterior(playerid, 0);
	 SendClientMessage(playerid, 0xFFFFFFFF, "Jus buvote nuteleportuotas į Come-a-Lot casino!");
 }
}
}

Dabar aš paaiškinsiu, kaip jungiklis veikia, viršuje yra toks:

switch

jis apibrėžia ką patikrinti, šiuo atveju menu eilutę, tarp "jungiklio" yra 'case's' tai yra, kad "jungiklis" skliausteliuose kintamasis gali būti skirtingų sąlygų, galite nustatyti. Pagal atvejus, kai jus įtraukiate vykdyti funkcijas, jeigu jos teisingos. Kai viskas bus padaryta teisingai, kaip mano pavizdyje, menių elementų/punktų/prekių poveikis yra sėkmingas.

Paskutinis žingsnis

Dabar mums reikia komandos, kad parodytų šitą menių. Tai lengvas žingsnis. Taigi, po OnPlayerCommandText rašome:

if(strcmp(cmdtext, "/teleportai", true) == 0)
{
ShowMenuForPlayer(teleportmenu,playerid);
return 1;
}

Buvo lengva, ar ne? :)

Paskutinis žodis

Kai jus perskaitėte šią temą, pabandykite sukurti savo menių. Kaip matote, tai nėra sunku. Aš labai tikiuosi, kad jums patiko ši pamoka. Tai turėtų nustebinti jūsų serverio žaidėjus. Taip pat mano manymu, taip kurti yra lengviau negu su GUI lentelėmis, viskas aiškiau išdėstita. Dar jus galite tai panaudoti parduotuvėms, kioskams, paprastiems tekstams ir t.t.

Prašau komentuoti. Jei negaila, prašau +R3P

Pilnas skriptas skirtas menu(jūsų bandymui sukurti menu):

#include <a_samp>

#define TEST_MENU_ITEMS 6

new Menu:TestMenu = -1;
new TestMenuStrings[6][16] = {"Test1", "Test2", "Test3", "Test4", "Test5", "Test6"};

HandleTestMenuSelection(playerid, row)
{
new s[256];

if(row < TEST_MENU_ITEMS) {
format(s,256,"You selected item %s",TestMenuStrings[row]);
SendClientMessage(playerid,0xFFFFFFFF,s);
}
}

InitTestMenu()
{
TestMenu = CreateMenu("Test Menu", 1, 200.0, 150.0, 200.0, 200.0);
 if(TestMenu == -1)
 {
	 printf("The creation of menu failed!");
	 return 0;
 }
for(new x=0; x < TEST_MENU_ITEMS; x++) {
		 AddMenuItem(TestMenu, 0, TestMenuStrings[x]);
}
 return 1;
}

public OnFilterScriptInit()
{
if(InitTestMenu())
 {
	 printf("The creation of menu succeeded!");
 }
 return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
 new Menu:PlayerMenu = GetPlayerMenu(playerid);

 if(PlayerMenu == TestMenu) {
 HandleTestMenuSelection(playerid, row);
}
 return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/menutest", true) && TestMenu != -1) {
	 ShowMenuForPlayer(TestMenu, playerid);
	 return 1;
}
return 0;
}

PAMOKĄ KŪRIAU AŠ! - Rokasma

Jei negaila +R3P

Ačiū:

wiki.sa-mp.com

  • Teigiamai 9
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 1 mėnesio...

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4150 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...