Project1

标题: 请教两个关于角色行走的问题~ [打印本页]

作者: 弦上の舞    时间: 2010-7-1 01:43
标题: 请教两个关于角色行走的问题~
1、关于全按键调用脚本的使用。先在MAIN前插入全按键调用脚本,然后把RM自带的Game_Player脚本第212~222行改成
if Kboard.press?($S)
   move_down
elsif Kboard.press?($A)
   move_left
elsif Kboard.press?($D)
   move_right
elsif Kboard.press?($W)
   move_up
  end
end
这样就能用WSAD控制角色了…但是出现个问题:
原来用方向键控制角色时四个方向键没有优先级排序;但是这种方法改成WSAD按键时就出现优先级了,角色向四个方向运动的优先顺序变成下、左、右、上(既SADW,跟脚本里输入的按键顺序一样了),为什么会这样?高人指点下啊~~
(PS:我说的优先级意思是:按W-向下走,同时按WA-还是向下,按A向左走一段距离后不松开再按下W-忽略A向下走了…另外两个优先级更低的DW就不用说了= =#...纠结!)


2、怎样能让角色只移动半格?(看着XP的角色行走图- -貌似不可能走半格的说……)
作者: zhangbanxian    时间: 2010-7-1 03:43
本帖最后由 zhangbanxian 于 2010-7-1 03:51 编辑

第一个问题,这样改改看(不知道和你用的是不是一个全键盘)
  1.     if Kboard.keyb($S)== 1
  2.         move_down
  3.      end
  4.      if Kboard.keyb($A) == 1
  5.         move_left
  6.      end
  7.      if Kboard.keyb($D) == 1
  8.         move_right
  9.      end
  10.      if Kboard.keyb($W) == 1
  11.         move_up
  12.      end
复制代码
第二个问题用论坛搜索
作者: 弦上の舞    时间: 2010-7-1 11:38
回复 zhangbanxian 的帖子能把你的全键盘给我吗?


   
作者: zhangbanxian    时间: 2010-7-1 12:23
回复 能把你的全键盘给我吗?
弦上の舞 发表于 2010-7-1 11:38
  1. #============================================================================

  2. module Kboard
  3. #==========================================================================
  4. # 以下是全鍵盤按鍵列表
  5. #------------------------------------
  6. $Rmouse_BUTTON_L = 0x01 # left mouse button
  7. $Rmouse_BUTTON_R = 0x02 # right mouse button
  8. $Rmouse_BUTTON_M = 0x04 # middle mouse button
  9. $Rmouse_BUTTON_4 = 0x05 # 4th mouse button
  10. $Rmouse_BUTTON_5 = 0x06 # 5th mouse button
  11. #------------------------------------
  12. $R_Key_BACK = 0x08 # BACKSPACE key
  13. $R_Key_TAB = 0x09 # TAB key
  14. $R_Key_RETURN = 0x0D # ENTER key
  15. $R_Key_SHIFT = 0x10 # SHIFT key
  16. $R_Key_CTLR = 0x11 # CTLR key
  17. $R_Key_ALT = 0x12 # ALT key
  18. $R_Key_PAUSE = 0x13 # PAUSE key
  19. $R_Key_CAPITAL = 0x14 # CAPS LOCK key
  20. $R_Key_ESCAPE = 0x1B # ESC key
  21. $R_Key_SPACE = 0x20 # SPACEBAR
  22. $R_Key_PRIOR = 0x21 # PAGE UP key
  23. $R_Key_NEXT = 0x22 # PAGE DOWN key
  24. $R_Key_END = 0x23 # END key
  25. $R_Key_HOME = 0x24 # HOME key
  26. $R_Key_LEFT = 0x25 # LEFT ARROW key
  27. $R_Key_UP = 0x26 # UP ARROW key
  28. $R_Key_RIGHT = 0x27 # RIGHT ARROW key
  29. $R_Key_DOWN = 0x28 # DOWN ARROW key
  30. $R_Key_SELECT = 0x29 # SELECT key
  31. $R_Key_PRINT = 0x2A # PRINT key
  32. $R_Key_SNAPSHOT = 0x2C # PRINT SCREEN key
  33. $R_Key_INSERT = 0x2D # INS key
  34. $R_Key_DELETE = 0x2E # DEL key
  35. #------------------------------------
  36. $R_Key_0 = 0x30 # 0 key
  37. $R_Key_1 = 0x31 # 1 key
  38. $R_Key_2 = 0x32 # 2 key
  39. $R_Key_3 = 0x33 # 3 key
  40. $R_Key_4 = 0x34 # 4 key
  41. $R_Key_5 = 0x35 # 5 key
  42. $R_Key_6 = 0x36 # 6 key
  43. $R_Key_7 = 0x37 # 7 key
  44. $R_Key_8 = 0x38 # 8 key
  45. $R_Key_9 = 0x39 # 9 key
  46. #------------------------------------
  47. $R_Key_A = 0x41 # A key
  48. $R_Key_B = 0x42 # B key
  49. $R_Key_C = 0x43 # C key
  50. $R_Key_D = 0x44 # D key
  51. $R_Key_E = 0x45 # E key
  52. $R_Key_F = 0x46 # F key
  53. $R_Key_G = 0x47 # G key
  54. $R_Key_H = 0x48 # H key
  55. $R_Key_I = 0x49 # I key
  56. $R_Key_J = 0x4A # J key
  57. $R_Key_K = 0x4B # K key
  58. $R_Key_L = 0x4C # L key
  59. $R_Key_M = 0x4D # M key
  60. $R_Key_N = 0x4E # N key
  61. $R_Key_O = 0x4F # O key
  62. $R_Key_P = 0x50 # P key
  63. $R_Key_Q = 0x51 # Q key
  64. $R_Key_R = 0x52 # R key
  65. $R_Key_S = 0x53 # S key
  66. $R_Key_T = 0x54 # T key
  67. $R_Key_U = 0x55 # U key
  68. $R_Key_V = 0x56 # V key
  69. $R_Key_W = 0x57 # W key
  70. $R_Key_X = 0x58 # X key
  71. $R_Key_Y = 0x59 # Y key
  72. $R_Key_Z = 0x5A # Z key
  73. #------------------------------------
  74. $R_Key_LWIN = 0x5B # Left Windows key (Microsoft Natural keyboard)
  75. $R_Key_RWIN = 0x5C # Right Windows key (Natural keyboard)
  76. $R_Key_APPS = 0x5D # Applications key (Natural keyboard)
  77. #------------------------------------
  78. $R_Key_NUMPAD0 = 0x60 # Numeric keypad 0 key
  79. $R_Key_NUMPAD1 = 0x61 # Numeric keypad 1 key
  80. $R_Key_NUMPAD2 = 0x62 # Numeric keypad 2 key
  81. $R_Key_NUMPAD3 = 0x63 # Numeric keypad 3 key
  82. $R_Key_NUMPAD4 = 0x64 # Numeric keypad 4 key
  83. $R_Key_NUMPAD5 = 0x65 # Numeric keypad 5 key
  84. $R_Key_NUMPAD6 = 0x66 # Numeric keypad 6 key
  85. $R_Key_NUMPAD7 = 0x67 # Numeric keypad 7 key
  86. $R_Key_NUMPAD8 = 0x68 # Numeric keypad 8 key
  87. $R_Key_NUMPAD9 = 0x69 # Numeric keypad 9 key
  88. $R_Key_MULTIPLY = 0x6A # Multiply key (*)
  89. $R_Key_ADD = 0x6B # Add key (+)
  90. $R_Key_SEPARATOR = 0x6C # Separator key
  91. $R_Key_SUBTRACT = 0x6D # Subtract key (-)
  92. $R_Key_DECIMAL = 0x6E # Decimal key
  93. $R_Key_DIVIDE = 0x6F # Divide key (/)
  94. #------------------------------------
  95. $R_Key_F1 = 0x70 # F1 key
  96. $R_Key_F2 = 0x71 # F2 key
  97. $R_Key_F3 = 0x72 # F3 key
  98. $R_Key_F4 = 0x73 # F4 key
  99. $R_Key_F5 = 0x74 # F5 key
  100. $R_Key_F6 = 0x75 # F6 key
  101. $R_Key_F7 = 0x76 # F7 key
  102. $R_Key_F8 = 0x77 # F8 key
  103. $R_Key_F9 = 0x78 # F9 key
  104. $R_Key_F10 = 0x79 # F10 key
  105. $R_Key_F11 = 0x7A # F11 key
  106. $R_Key_F12 = 0x7B # F12 key
  107. #------------------------------------
  108. $R_Key_NUMLOCK = 0x90 # NUM LOCK key
  109. $R_Key_SCROLL = 0x91 # SCROLL LOCK key
  110. #------------------------------------
  111. $R_Key_LSHIFT = 0xA0 # Left SHIFT key
  112. $R_Key_RSHIFT = 0xA1 # Right SHIFT key
  113. $R_Key_LCONTROL = 0xA2 # Left CONTROL key
  114. $R_Key_RCONTROL = 0xA3 # Right CONTROL key
  115. $R_Key_L_ALT = 0xA4 # Left ALT key
  116. $R_Key_R_ALT = 0xA5 # Right ALT key
  117. #------------------------------------
  118. $R_Key_SEP = 0xBC # , key
  119. $R_Key_DASH = 0xBD # - key
  120. $R_Key_DOTT = 0xBE # . Key
  121. #------------------------------------
  122. GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  123. GetKeyboardState = Win32API.new("user32","GetKeyState",['I'],'I')
  124. GetSetKeyState = Win32API.new("user32","SetKeyboardState",['I'],'I')
  125. #------------------------------------
  126. module_function
  127. #------------------------------------
  128. def keyb(rkey)
  129. if GetKeyState.call(rkey) != 0
  130. return 1
  131. end
  132. return 0
  133. end
  134. #------------------------------------
  135. def keyboard(rkey)
  136. GetKeyState.call(rkey) & 0x01 == 1 #
  137. end
  138. #------------------------------------
  139. def key(rkey, key = 0)
  140. GetKeyboardState.call(rkey) & 0x01 == key #
  141. end
  142. end
复制代码

作者: 弦上の舞    时间: 2010-7-1 13:14
回复 zhangbanxian 的帖子全按键的130行出现TypeError。。。前面那个是从212行开始改吗?还得在最后加个end?


   
作者: zhangbanxian    时间: 2010-7-1 15:15
回复 弦上の舞 的帖子
这样写,前面是我根据你的写法改的。
  1. if Kboard.keyb(0x53)== 1
  2.         move_down
  3.      end
  4.      if Kboard.keyb(0x41) == 1
  5.         move_left
  6.      end
  7.      if Kboard.keyb(0x44) == 1
  8.         move_right
  9.      end
  10.      if Kboard.keyb(0x57) == 1
  11.         move_up
  12.      end
复制代码

作者: 弦上の舞    时间: 2010-7-1 15:47
回复 zhangbanxian 的帖子- -#...咱真是失败……  这样吧,你做个最简单的工程,就用WSAD控制方向的,发我邮箱里呗?[email protected]                    咱是新手,万分感谢!!!!~


   
作者: zhangbanxian    时间: 2010-7-1 16:05
本帖最后由 zhangbanxian 于 2010-7-1 16:12 编辑
回复 - -#...咱真是失败……  这样吧,你做个最简单的工程,就用WSAD控制方向的,发我邮箱里呗?           ...
弦上の舞 发表于 2010-7-1 15:47
按理说应该不是全键盘脚本的问题,lz的写法貌似是elsif自然会有优先 Project2.rar (187.45 KB, 下载次数: 130)
作者: IamI    时间: 2010-7-1 16:25
4个全加上不够,注意Game_Character里除了move_4个方向以外还有别的方法哦~
作者: 弦上の舞    时间: 2010-7-1 20:51
谢谢各位啦,还附带个八方向的- -...我要去好好研究研究,嘿嘿~





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1