[Script] [ACE] [System] Event không chạy khi màn hình không chiếu vào

sanggameboysanggameboy Posts: 1,943Registered
[align=center][size=large]Event không chạy khi màn hình không chiếu vào[/size][/align]

[chapter]Giới thiệu[/chapter]
Khi bạn đặt một event nào đó một vài lệnh move route tự động thực hiện, thì khi bạn đi ra khỏi vùng màn hình chiếu cái event đó, event sẽ ngừng làm theo các lệnh move route mà lúc trước bạn đặt. VD: Bạn đặt lệnh tự động đuổi theo player. Khi player lại gần event đó, thì event đó sẽ đuổi theo. Nhưng khi player chạy xa, và trên màn hình game không còn "chiếu" event đó nữa, thì dù bạn đợi bao lâu, event cũng không tới chỗ bạn. Đơn giản là vì nó đã bị dừng lệnh move route đó (ở ví dụ này là đuổi theo player).

[chapter]Giải thích[/chapter]
Nhằm tránh tình trạng giật lag trong game, trong RPG Maker (chính xác hơn là trong script Game_Event) đã có một dòng lệnh khiến cho các event không xuất hiện trên màn hình bị dừng các lệnh di chuyển.

[chapter]Fix lỗi[/chapter]
Ấn F11 để mở Script Editor và chọn script Game_Event. Tiếp theo, các bạn tìm dòng này trong script đó:
if near_the_screen? && @stop_count > stop_count_threshold

Và sửa nguyên cái dòng đó thành thế này:
if ($game_switches[1] || near_the_screen?) && @stop_count > stop_count_threshold

Vậy là khi bạn bật công tắc 1, thì lỗi này sẽ được sửa, và khi bạn tắt công tắc 1, mọi thứ sẽ trở lại như ban đầu (để tránh lag). Các bạn có thể sửa số 1 trong script thành một số nào đó (nó là số switch).

[chapter]Tác giả[/chapter]
Shaz

# CÁCH KHÁC: CLICK

Comments

  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
    Tưởng 1 script dài luôn chứ, ai ngờ có 1 dòng à :3
  • finalholylightfinalholylight Posts: 251Registered
    Anti-lag là cần thiết, sanggameboy có cách nào đó làm cho thay vì nó giới hạn trong khung màn hình, giờ cho nó giới theo theo 1 khung AxB tiles (tùy chỉnh trong script) ko ?, vứa hạn chế lag ở map lớn, vừa đủ để cho các event trong phạm vi AxB tiles hoạt động được.
  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
    Thử tìm hiểu cái near_the_screen? xem có sửa nó lại được không
    :laclac:
  • CryingWOLFCryingWOLF Posts: 1,766Registered
    Anti-lag là cần thiết, sanggameboy có cách nào đó làm cho thay vì nó giới hạn trong khung màn hình, giờ cho nó giới theo theo 1 khung AxB tiles (tùy chỉnh trong script) ko ?, vứa hạn chế lag ở map lớn, vừa đủ để cho các event trong phạm vi AxB tiles hoạt động được.

    Dự là
    Bằng niềm tin
  • sanggameboysanggameboy Posts: 1,943Registered
    Anti-lag là cần thiết, sanggameboy có cách nào đó làm cho thay vì nó giới hạn trong khung màn hình, giờ cho nó giới theo theo 1 khung AxB tiles (tùy chỉnh trong script) ko ?, vứa hạn chế lag ở map lớn, vừa đủ để cho các event trong phạm vi AxB tiles hoạt động được.

    Sang không chuyên vào mảng script lắm nên cũng không rõ nữa. (^_^! )
  • NagiNagi Posts: 589Registered
    Mình nghĩ chính xác thì phải là:
    if ($game_switches[1] || near_the_screen?) && @stop_count > stop_count_threshold
    

    Nếu như thế này:
    if ([b]$game_switches[1] || near_the_screen?) && @stop_count > stop_count_threshold
    

    Chúng ta sẽ được như thế này:
    7P2jU.png
  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
  • sanggameboysanggameboy Posts: 1,943Registered
    Sorry mọi người. Mình đã sửa : )
  • NagiNagi Posts: 589Registered
    Mình vừa tìm thấy 1 cách khác để làm cái vụ này. Script của Kread, đặt tên event có chữ [update] là được.
    # Put [update] in the event's name and the move route will always update.
    #
    # ~Kread
     
    class Game_Event < Game_Character 
      #--------------------------------------------------------------------------
      # * Determine if Near Visible Area of Screen
      #--------------------------------------------------------------------------
      alias_method(:krx_alfix_ge_nts?, :near_the_screen?)
      def near_the_screen?(dx = 12, dy = 8)
        # YEA compatibility
        if $imported && $imported["YEA-CoreEngine"]
          dx = dy = nil
        end # YEA compatibility
        return true if @event.name.include?('[update]')
        return krx_alfix_ge_nts?(dx, dy)
      end
    end
    
  • sanggameboysanggameboy Posts: 1,943Registered
    Cảm ơn Nagi, tớ đã update cách của cậu trên post 1.
Sign In or Register to comment.