Jump to content
Sign in to follow this  
Abyss

tutorial [Bài 2 - Initialisers Code] Mã khởi tạo và công dụng của chúng [forward, public]

Recommended Posts

sa-mp series.png

Hôm qua chúng ta đã cùng tìm hiểu const, enum với bài học số 1 về Initialisers Code, chúng hơi khó hiểu có đúng không ^^. Với bài học hôm nay chúng ta sẽ cùng nghiên cứu 2 mã khởi tạo mà bạn sẽ luôn thấy chúng trong toàn bộ các gamemode, chúng thông dụng gần như các plain function đó. Đúng vậy, hôm nay chúng ta sẽ nghiên cứu về forwardpublic. Hãy cùng tìm hiểu lý do vì sao trong pawn, chỉ có public function mới có thể gọi từ bên ngoài script hay tại sao phải khai báo forward trước một public function nhé.

Menu bài viết về Initialisers Code

I. FORWARD

Khi sử dụng mã khởi tạo forward, trình biên dịch sẽ hiểu đây là một function sẽ được gọi tới sau. Nó được yêu cầu bắt buộc cho tất cả các public function tuy nhiên chúng ta vẫn có thể sử dụng chúng trong nhiều nơi khác. Nó được sử dụng để "forward" (chuyển tiếp) với đầy đủ các tham số của function mà bạn muốn chuyển tiếp và kết thúc bằng dấu chấm phẩy.

Hidden Content

    Give reaction to this post to see the hidden content.
Khi nó được sử dụng với public funcion, forward có thể sử dụng để sửa các cảnh báo hiếm gặp như sử dụng một function trả về một tag kết quả (ví dụ: float) trước khi nó được khai báo.

main()
{
	new Float:myVar = MyFloatFunction();
}
 
Float:MyFloatFunction()
{
	return 5.0;
}

[/hide]Với đoạn script trên, trình biên dịch sẽ hiển thị cảnh báo rõ ràng bởi vì nó không biết làm sẽ phải trả về là số hay số thập phân. Trong ví dụ này, nó trả về dưới dạng float. Điều này có thể được giải quyết bằng cách khai báo hàm trước khi sử dụng.

Hidden Content

    Give reaction to this post to see the hidden content.
Hoặc bằng cách sử dụng forward trước hàm để trình biên dịch biết phải làm gì:

Hidden Content

    Give reaction to this post to see the hidden content.

Cách gọi một public function theo tên:

Hidden Content

    Give reaction to this post to see the hidden content.
public function với tiền tố 'public' hoặc '@' đều phải thiết lập chuyển tiếp 'forward' như đã nói ở mục 'forward' phía trên.

Hidden Content

    Give reaction to this post to see the hidden content.
Với ví dụ trên,

  • Hàm SetTimerEx đã được sử dụng để gọi "MyOtherPublicFunction" sau 5 giây và truyền giá trị nguyên 7 để 'printf'.
  • Hàm main được sử dụng nhiều trong các ví dụ như thế này, nó tương tự như một public function ở chỗ nó có thể gọi từ bên ngoài tập lệnh, tuy nhiên nó không phải là một public function, nó có một địa chỉ đặc biệt để server nhận biết nơi để gọi chúng trong tệp amx.

Tất cả SA-MP Callbacks đều là public function và được gọi từ bên ngoài tập lệnh một cách tự động:

Hidden Content

    Give reaction to this post to see the hidden content.

Hidden Content

    Give reaction to this post to see the hidden content.

forward MyPublicFunc();
 
main()
{
	MyPublicFunc();
}
 
public MyPublicFunc()
{
	printf("Hello");
}

Nó nhanh hơn nhiều so với việc sử dụng CallLocalFunction hoặc native.

  • Like 11
  • Thanks 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...