Về đầu trang

ž!...Topic hướng dẫn tạo Game Online...!

Thảo luận trong 'Game Maker' bắt đầu bởi KuteNamA, 5/7/11.

  1. KuteNamA

    KuteNamA Game Thủ Tiềm Năng
    Tham gia ngày: 31/12/10
    Bài viết: 386
    Đã được thích: 0
    Điểm thưởng: 1
    Điểm thành tích: 0
    Người quan tâm: 3

    Hướng dẫn make Game Online

    ~KuteNamA~​

    Phần 1
    o79
    o89o79
    [Ai có ý nghĩ”Game maker chỉ làm được game offline chứ không làm được online” thì bỏ ngay cái đó khỏi trong đầu đi nhé.Bời vì sau khi đọc tut hướng dẫn này bạn sẽ có thể tự tạo cho mình một Game Online hoàn chỉnh.]
    ----------Những điều cần lưu ý để cho bạn đỡ nản khi làm game online.----------

    Giải thích một số thuật ngữ sẽ sử dụng sau này
    Client và sever đều là 2 tập tin gmk.
    -Client tương tự như cái file exe mà bạn hay vào game của các nhà phân phối để chơi ý.
    -Sever (máy chủ) là file exe của bên họ,để họ quản lý kết nối, nghĩa là chỉ một máy được chọn làm máy chủ sẽ phải mở tập tin sever này, khi máy chủ đóng tập tin thì tất cả các người chơi sẽ không vào game được


    SEVER
    o55Làm game online rất rễ,nhưng cần hiểu kỹ nguyên lý(CSC:tý nói rõ sau)
    o20Bạn đang lo về sever, thường thường thì sever làm bằng Game Maker,nên phần cài đặt sever cũng đã quyen thuộc rồi.Sever thường phải chạy qua các phần mềm hỗ trợ như HAMICHI,TUNGLE, đừng lo,NamKute đã có
    giải pháp,mở sever như những công ty game online chuyên nghiệp và không bắt người chơi phải cài đặt những phần mềm rắc rối và bất tiện kia.
    Đường truyền:FTP,VNPT,… thì BÌNH THƯỜNG.Còn Cáp Quang thì QUÁ TỐT.Mạng LAN thì vứt đi.(chỉ đối với SEVER thôi nhé chứ client và sever để test game thì vẫn được)
    :sieu nhan:Lag:Nếu bạn biết cách truyền Dữ liệu tiết kiệm mức độ Lag sẽ là Kém,còn truyền lung tung,nhận lung tung thì sẽ Lag ngay lập tức.Ngoài ra cần kết hợp với Host DNS(host để người chơi không cần download phần mềm hỗ trợ) pro để giảm lag,DNS free vẫn có nhưng hơi lag một tý tẹo tèo teo.Nói cái này đừng buồn nha,sever game maker chứa đựng được 65536 client cùng một lúc trong một sever nhưng host DNS thì 32 client thôi à.Nên nếu muốn sever tốt thì nên liên hệ để đăng ký một DNS Pro riêng,hoặc có thể tạo nhiều sever free cho người chơi chọn sever.

    CLIENT​

    :m2:Làm bằng Game Maker.
    Độ chậm ,nhanh của client là do client của bạn nặng hay nhẹ,còn tốc độ đường truyền là do mạngsever,không liên quan gì đến client cả.
    Yêu cầu
    1 máy online 24/24 cho 1 sever. Là mạng chính ,không được dùng máy là Mạng Lan.
    1 file .gmk mà sau đây tôi sẽ hướng dẫn các bạn tạo.

    Lưu ý
    Nếu có ăn cắp tài nguyên của game online khác làm game online của mình thì nên chỉnh sửa một chút và cũng đừng có lấy 100% tài nguyên của nó.Để nó không lôi mình ra tòa được.
    Bạn có thể mở sever và client trong cùng một máy để test game.

    Trước khi làm được thì mình nghĩ các bạn nên hiểu mấy cái này trước và mình sẽ post tiếp tut phần 2 vào ngày tiếp theo,nhanh nhất có thể

    Không được quyên nhấn nút Thank khi xem bài viết.Không comment khi tác giả chưa up hết
     
    Last edited by a moderator: 5/7/11
  2. KuteNamA

    KuteNamA Game Thủ Tiềm Năng
    Tham gia ngày: 31/12/10
    Bài viết: 386
    Đã được thích: 0
    Điểm thưởng: 1
    Điểm thành tích: 0
    Người quan tâm: 3

    Phần 2

    Phần 2​

    :m16::m5::m16:
    Nguyên lý CSC (Client-Sever-Client)
    Như đã hứa,hôm nay mình sẽ giúp bạn hiểu được thế nào là nguyên lý CSC mà các Game Online nổi tiếng trên thế giới hiện nay thường dùng.Và chỉ ra các mà các nhà làm game đã lừa các bạn.Xem xong bạn sẽ hiểu hoạt động của nó thế nào để có thể tạo riêng một engine online đình đám rồi.

    CSC"Client-Sever-Client" thể hiện các thao tác mà thông tin sẽ được truyền, hay nói cách khác là con đường mà thông tin di chuyển giữa các máy tính
    Tuy gọi là Client-Sever-Client, nhưng đây là hai Clients khác nhau, của hai máy tính khác nau, hai người chơi khác nhau
    :m8:Nguyên lý là như sau:
    1.Client của người dùng gửi thông tin cho Sever
    2.Sever nhận và truyền lại thông tin cho Client(có thể là client của mình hoặc cho client khác)
    3.Client khác sẽ nhận thông tin từ sever và thực hiện những thông tin được truyền đó
    :hoc bai:Ví dụ : Người chơi A đăng nhập vào game.Sever nhận thông tin và truyền cho người chơi khác,
    Client của người chơi nhận được thông tin từ sever(chỉ những client được nhận thôi) sẽ có nhiệm vụ tạo một obj_fake(object giả). obj_fake vừa tạo sẽ có đặc tính và vị trí ban đầu của người chơi A.Thế là ta đã thiết lập được 1 phần online nhỏ.Khi người Adi chuyển,tọa độ chuyển tới sever,sever chuyển tới người B tọa độ x,y đó và ở client người B
    ,obj_fake mang id của người Asẽ có tọa độ x,y mà người Avừa gửi.

    Hình minh họa:
    [​IMG]

    Giải thích :
    >Nhiều bạn tưởng rằng khi chơi game online thì mình có thể gặp bạn bè mình qua cái màn hình trực tuyến nhưng thật ra bạn đang lăng nhăng với cả đống obj_fake(nhân vật giả mạo) ở client bạn.Những obj_fake này có thông tin(tọa độ,tên,level,map đang ở...chẳng hạn) giống với những người ở bên kia đang gửi sang.Bạn đã bị những nhà làm game online lừa rồi.< Bây giờ đến lượt mình lừa những Player ngây thơ của mình.

    o56o56o56​
    Giờ thì bạn đã hiểu nguyên lý này rồi chứ,nhấn cho tớ một nút Thanks ủng hộ.
    Nêu chưa hiểu pm yahoo:emnam_kute2 để được giải đáp.và nhấn Thanks sau cũng được.
     
    Last edited by a moderator: 5/7/11
  3. KuteNamA

    KuteNamA Game Thủ Tiềm Năng
    Tham gia ngày: 31/12/10
    Bài viết: 386
    Đã được thích: 0
    Điểm thưởng: 1
    Điểm thành tích: 0
    Người quan tâm: 3

    Phần 3

    Phần 3​

    :GT xp::GT xp::GT xp:​
    Các loại gói dữ liệu chuyển và nhận​


    Vậy có những thể loại thông tin nào để truyền?
    Xin thưa là có 3x2=6 loại.
    1.Byte : cho phép truyền giá trị từ 0 đến 255 (thông tin truyên không vượt quá mức này thì nên dùng cái này cho nó giảm lag) [dữ liệu truyền là 1] ít
    2.Short : giống cái trên nhưng từ -32768 đến 32768 [dữ liệu truyền là 2] bình thường
    3.uShort : 0 đến 32768x2(tự tính nha) [dữ liệu truyền là 2] bình thường
    4.int :-2147483648 đến 2147483648[dữ liệu truyền là 4] nhiều
    5.uint :0 đến 2147483648x2[dữ liệu truyền là 4] nhiều
    6.string:truyền tất cả các ký tự. [dữ liệu truyền là 1 cho mỗi ký tự nhé] quá quá nhiều.
    [Với gói string các bạn nên thay bằng byte cho nó nhẹ.
    Ví dụ :bạn muốn gửi ‘Tôi yêu NamKuteA nhiều lắm ‘ thì thay vào đó,bạn gửi byte là 22 chẳng hạn.rồi đặt một biến tương ứng.
    If biến=22 thì string=‘Tôi yêu NamKuteA nhiều lắm ‘]

    Các bạn hãy suy nghĩ và tính toán kỹ các gói để truyền cho game đỡ lag,vì mình nghĩ các bạn toàn dùng sever free nên phải tiết kiệm cái này.
    o100Lưu ý :Không được đặt code truyền dữ liệu vào Step event,game bạn sẽ giật đó và chậm đóo123(vừa nãy mình nói là client không thể làm mạng lag được,nhưng mạng có thể làm client giật đấy,hãy lưu ý).Và chỉ send dữ liệu khi cần thiết.
    Không lăng nhằng nữa,hãy cài đặt thôi.ở phần 4 mình sẽ hướng dẫn và có example cụ thể.Mục đích post example sau cùng là để các bạn hiểu được cách làm thì làm sẽ dễ và không cần suy nghĩ và hỏi nhiều.
     
  4. thangnhokpro

    thangnhokpro Game Thủ Tiềm Năng
    Tham gia ngày: 4/7/08
    Bài viết: 450
    Đã được thích: 0
    Điểm thưởng: 0
    Điểm thành tích: 0
    Người quan tâm: 1

    bác này phán như thánh.haha.truyền dữ liệu gói string mà kêu là nhiều.bác thay cả câu =1byte hay thế.chat là người ta chát tự do.chứ chẳng ai cũng vào yêu nam kute
     
  5. sowbit262

    sowbit262 Game Thủ Tiềm Năng
    Tham gia ngày: 2/1/11
    Bài viết: 138
    Đã được thích: 1
    Điểm thưởng: 0
    Điểm thành tích: 1

    Chú này không hiểu ý của bác ấy rồi ý bác ấy nói là sử dụng cho nhiều mục đích khác nhau chứ có phải là chat đâu, cái đó chỉ là ví dụ về việc tiết kiệm đường truyền! Mà hình như bác chưa có đụng đến 39dll.dll phải ko ? nên bác không biết truyền string sẽ tốn dụng lượng cỡ nào ! chỉ mới test sơ thôi (chưa tính đến chat) là truyền bằng byte không là gần 20~50MB trong thời gian 5 phút đó!
     
    HihaMata thích bài này.
  6. KuteNamA

    KuteNamA Game Thủ Tiềm Năng
    Tham gia ngày: 31/12/10
    Bài viết: 386
    Đã được thích: 0
    Điểm thưởng: 1
    Điểm thành tích: 0
    Người quan tâm: 3

    Ghét những người không đọc ký thế nhỉ
    dữ liệu truyền là 1 cho mỗi ký tự nhé
    Tức là khi chát dòng "Toi chua doc ky huong dan",sẽ là 20x1 là 20 cho một lần chát cái chữ "Toi chua doc ky huong dan" đấy,thử tưởng tượng cái chữ dài hơn xem,mà mỗi lần gửi đến 5 byte là nhiều rồi.
     
  7. to@n

    to@n Game Thủ Chuyên Nghiệp
    Tham gia ngày: 30/9/08
    Bài viết: 4,176
    Đã được thích: 0
    Điểm thưởng: 46
    Điểm thành tích: 0
    Người quan tâm: 13

    bài viết good đó:x để mấy hum nữa ngâm cứu xem sao. thank em:x
     
  8. Quangculoj

    Quangculoj Game Thủ Tích Cực
    Tham gia ngày: 9/4/09
    Bài viết: 1,507
    Đã được thích: 0
    Điểm thưởng: 27
    Điểm thành tích: 0
    Người quan tâm: 3

    To@n have combacked for a long time no see!!! chuẩn bị ổng tung bom tấn NCB III Online đê các bạn :GT5::GT17:
     
  9. Megasoftvn-2009

    Megasoftvn-2009 Game Thủ Tích Cực
    Tham gia ngày: 18/11/09
    Bài viết: 727
    Đã được thích: 0
    Điểm thưởng: 16
    Điểm thành tích: 0
    Người quan tâm: 2

    Ờ rất có thể lão này mờ ám lắm =.="
     
  10. Quangculoj

    Quangculoj Game Thủ Tích Cực
    Tham gia ngày: 9/4/09
    Bài viết: 1,507
    Đã được thích: 0
    Điểm thưởng: 27
    Điểm thành tích: 0
    Người quan tâm: 3

    xông thẳng vào cái topic tạo game online mới ghê chứ, các chú chuẩn bị tinh thần đê......... >:)>:)
     
  11. Megasoftvn-2009

    Megasoftvn-2009 Game Thủ Tích Cực
    Tham gia ngày: 18/11/09
    Bài viết: 727
    Đã được thích: 0
    Điểm thưởng: 16
    Điểm thành tích: 0
    Người quan tâm: 2

    Híc híc chỉ trông cậy vào trùm box thôi. Chả ai có game gì cả :((
     
  12. dangbaoloc_1225

    dangbaoloc_1225 Moderator Moderator
    Tham gia ngày: 10/10/07
    Bài viết: 4,970
    Đã được thích: 0
    Điểm thưởng: 53
    Điểm thành tích: 0
    Người quan tâm: 8

    Bố Nam viết phần 4 đi:-w hức hức :-w Viết qua đây trước mình sửa cho>:)
    Tiện thể hỏi cái:-S khi dữ liệu trong khoảng 0->3000, muốn dùng gói byte để truyền, có thể chia giá trị cần truyền cho 20, rồi khi truyền xong nhân lại với 20 được ko?:mad:)
     
  13. minh03120

    minh03120 Game Thủ Tập Sự
    Tham gia ngày: 20/9/10
    Bài viết: 69
    Đã được thích: 0
    Điểm thưởng: 0
    Điểm thành tích: 0

    bài viết có cố gắng,tuy nhiên người viết quá khiêm tốn
    để mô tả ít nhất 1 player của 1 client a trong client b
    thì server phải truyền ít nhất cũng phải 50 byte trên n phần nghìn giây n>=20

    50=posx(4 byte)+posy(4)+name(tùy,có thể max 20 kí tự=20byte,sử dụng tiếng việt
    thì x2=40byte)+trạng thái player(ít nhất cũng 3 biến trở nên 3x4=12)+các speed
    chạy ảnh (>1 biến >=4)+nếu có thể hiện máu thì phải truyền thêm máu hiện tại+máu max(2x4=8).....
    đây là lượng truyền thường xuyên(trung bình cũng khoảng 10 lần /giây) còn nhiều lệnh khác

    và bắt buộc phải đặt trong step



    buồn quá không biết làm gì ngồi lướt web
     
  14. dangbaoloc_1225

    dangbaoloc_1225 Moderator Moderator
    Tham gia ngày: 10/10/07
    Bài viết: 4,970
    Đã được thích: 0
    Điểm thưởng: 53
    Điểm thành tích: 0
    Người quan tâm: 8

    Hoàn toàn có cách hạn chế đặt trong step, chả hạn nhân vật di chuyển sang trái, thì không nhất thiết gán hoành độ mỗi step; chỉ việc chuyền dữ liệu tốc độ ở thời điểm bấm nút, khi nhả nút thì lại truyền dữ liệu tốc độ=0; nếu cần thiết đảm bảo vị trí x,y không bị lệch, thì cứ truyền thêm nó trong mục ấn, thả nút, chứ không đưa hết vào step
     
  15. minh03120

    minh03120 Game Thủ Tập Sự
    Tham gia ngày: 20/9/10
    Bài viết: 69
    Đã được thích: 0
    Điểm thưởng: 0
    Điểm thành tích: 0

    step là nó đặt kết nối với máy chủ,còn việc,xử lý việc di chuyển ở mỗi client là do server
    làm
    để hạn chế gửi các frame trạng thái thì nên tạo 1 số biến quy định
    vì tất cả dữ liệu ở client có thì server đều có rồi
    ví dụ: khi nào palyer di chuyển nó sẽ bắn 1 tin nên server là nó chuẩn bị di chuyển
    lúc đó server sẽ thực hiện công việc di chuyển player= 1 thuật toán tìm đường nào đó
    rồi bắn 1 gói tin cho các player ở gần player đó,như thế sẽ giảm độ truyền tải băng thông
     
  16. KuteNamA

    KuteNamA Game Thủ Tiềm Năng
    Tham gia ngày: 31/12/10
    Bài viết: 386
    Đã được thích: 0
    Điểm thưởng: 1
    Điểm thành tích: 0
    Người quan tâm: 3

    Phần 4
    o110o110o110

    Tạo Sever
    Đã quá lâu kể từ khi phần 3 ra đời rồi đúng không và bây giờ là ngày phần 4 ra đời.Xin lỗi vì đã để các bạn phải đợi lâu.Bài ngày hôm nay sẽ hướng dẫn các bạn những bước đầu tiên khi tạo một sever.

    Trước hết hãy down Engine được gắn ở file đính kèm.(Mỗi bài mới là bạn phải down 1 bản nhé,xóa bản củ đi cũng được,việc này mất mấy giây thôi)

    Giải nén và bắt đầu mở file sever.gmk ra .
    Bước 1:Mình muốn các bạn biết về cách khởi động những thứ cơ bản khi tạo một game online.o79
    Bạn vào Scripts->scr_sever_init:
    //Bắt đầu sever và tạo một cổng nhận thông tin chung gian
    //Khởi động các biến Global(biến dùng cho toàn game)


    globalglobaltemp;//cái này không cần quan tâm

    //Biến để xác nhận địa chỉ tạo sever.
    global.server_port = 50000;//Port giống như một cái phòng cho mọi người vào gặp nhau online.*
    global.server_listening_socket = -1;//Đây có thể được coi là gói truyền thông tin cho mỗi client.*
    global.server_accounts = 0;//Số người đã đăng ký
    global.server_path = '';//*


    //Thông tin truyền dữ liệu,Giúp bạn xem tần số truyền(/1 giây) và tổng dung lượng đã truyền.*
    global.feedback_upload_per_second = 0;
    global.feedback_download_per_second = 0;
    global.feedback_upload_total = 0;
    global.feedback_download_total = 0;
    global.feedback_packet_total_sent = 0;
    global.feedback_packet_total_received = 0;

    //Bắt đầu 39dll và MyINI.dll.
    //39dll là dll giúp bạn truyền thông tin giữa các client.Vẫn nhớ C-S-C chứ,thực ra là C-Dll-C
    //MyINI.dll là một dll giúp bạn quản lý ini.

    dllinit(0,true,true);
    iniStart();


    //Tạo một gói truyền thông tin cho mỗi client*
    global.server_listening_socket = tcplisten(global.server_port,10,true);


    //Phần dưới này chỉ để load thông tin từ ini để xem có bao nhiêu người đã đăng ký game của mình*

    global.server_accounts = 0;//So nguoi da dang ky
    global.server_path = working_directory + '/Server Configuration.ini';


    if (file_exists(global.server_path) == false)
    {
    iniWriteReal(global.server_path,'Server Configuration','Accounts',0);
    iniClearFile(global.server_path);
    }
    global.server_accounts = iniReadReal(global.server_path,'Server Configuration','Accounts',-1);

    //Hết,mình sẽ viết tiếp bước 2.
    :cua:Chú ý nhe:* là những thứ bạn không cần quan tâm hoặc muốn quan tâm thì sẽ được học ở phần sau vì nó không ảnh hưởng tới game mấy.Cứ để như thế và chạy game.:an nhanh:
    Vì mới chỉ Bước 1 nên các bạn thử chạy 1 sever và 2 client để thử chức năng online xem.Nếu bị đồi Ip thi nên nhớ 127.0.0.1 hoặc để trống là ip để test trên cùng 1 máy.

    o81Nhấn thank nếu cảm thấy bài này hay và có ích.
    Nhờ Mod chỉnh sửa,căn chỉnh bài viết nếu có và chuyển bài này lên trên với.Thank you!
     

    Các file đính kèm:

  17. sowbit262

    sowbit262 Game Thủ Tiềm Năng
    Tham gia ngày: 2/1/11
    Bài viết: 138
    Đã được thích: 1
    Điểm thưởng: 0
    Điểm thành tích: 1

    Tiếp phần 5 đi Ku ! Đang hay ^^
     
  18. Megasoftvn-2009

    Megasoftvn-2009 Game Thủ Tích Cực
    Tham gia ngày: 18/11/09
    Bài viết: 727
    Đã được thích: 0
    Điểm thưởng: 16
    Điểm thành tích: 0
    Người quan tâm: 2

    Một phong cách viết bài rất là cô-tếch xì-tin [​IMG]
     
  19. dangbaoloc_1225

    dangbaoloc_1225 Moderator Moderator
    Tham gia ngày: 10/10/07
    Bài viết: 4,970
    Đã được thích: 0
    Điểm thưởng: 53
    Điểm thành tích: 0
    Người quan tâm: 8

    ^Ném đá hả thím?y1
    Để khi nào cho lên đầu;)) bác cứ thêm mấy phần nữa đi:D
     
  20. asenal108

    asenal108 Game Thủ Tập Sự
    Tham gia ngày: 12/1/11
    Bài viết: 7
    Đã được thích: 0
    Điểm thưởng: 0
    Điểm thành tích: 0

    bạn ơi bạn viết tiếp đi . bạn cho mình yahoo đc không. mình cũng đang muốn làm 1 game online của chính mình . sắp tới mình cũng mở 1 diễn đàn chuyện về lập trình game cho nhưng người mới học ( cả mìn ) mình mong có đc sự giúp đỡ của bạn . yahoo mình là master_9x2003 có gì pm mình nhé