设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1830|回复: 6
打印 上一主题 下一主题

[已经过期] 求事件八方向跟随主角?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
56 小时
注册时间
2011-1-1
帖子
28
跳转到指定楼层
1
发表于 2012-10-26 20:19:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
如题。
要做出队员跟随的效果,因为要指向人物,所以队员必须是事件。
伸手党在此感谢!!!
TAT寒假这么快就过完了啊啊啊啊啊!

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
2
发表于 2012-10-26 23:05:40 | 只看该作者
使用人物跟随的脚本,动点手脚让它可以返回队员x,y坐标,在要求指向人物时,打开透明开关,
让事件坐标等于队员坐标就行了,完了之后,移除事件,关闭透明.就这样了,
不过最近论坛不知怎么了,久了不来,回答问题,经验都没有??
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
3
发表于 2012-10-27 18:52:44 | 只看该作者
  1. class Game_Character
  2.   def move_toward(to)
  3.     sx = @x - to.x
  4.     sy = @y - to.y
  5.     if sx == 0 and sy == 0
  6.       return
  7.     end
  8.     abs_sx = sx.abs
  9.     abs_sy = sy.abs
  10.     if abs_sx != 0 and abs_sy != 0
  11.       if sx>0 and sy>0
  12.         move_upper_left;return
  13.       elsif sx>0 and sy<0
  14.         move_lower_left;return
  15.       elsif sx<0 and sy>0
  16.         move_upper_right;return
  17.       elsif sx<0 and sy<0
  18.         move_lower_right;return
  19.       end
  20.     end
  21.     if sx == 0
  22.       if sy > 0
  23.         move_up
  24.       elsif sy < 0
  25.         move_down
  26.       end
  27.     elsif sy == 0
  28.       if sx > 0
  29.         move_left
  30.       elsif sx < 0
  31.         move_right
  32.       end
  33.     end
  34.   end
  35. end
复制代码

评分

参与人数 1星屑 +80 收起 理由
hcm + 80 感谢回答

查看全部评分


http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
465 小时
注册时间
2011-4-13
帖子
174
4
发表于 2012-10-27 20:42:00 | 只看该作者
好像是从某个范例游戏上抠下来的
你试试能不能用
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. #超八方向脚本专用人物跟随脚本 by IKKI
  5. #注意:本人物跟随脚本是基于超八方向脚本定做的脚本,
  6. #跟非超八方向的系统核心有严重冲突。
  7. # ————————————————————————————————————

  8. # ▼▲▼ XRXS13. パーティ列車移動 ver.1.02 ▼▲▼
  9. # by fukuyama

  10. #
  11. # Train_Actor
  12. #
  13. # [email protected]
  14. # http://www4.big.or.jp/~fukuyama/rgss/Train_Actor.txt
  15. #

  16. module Train_Actor
  17. #是否使用停止跟随的方法,也就是说,这里false改为true的时候,如果TRANSPARENT_SWITCHES_INDEX
  18. #开关打开,跟随的人物就消失了(其实只是变成透明而已)
  19. TRANSPARENT_SWITCH = true
  20. TRANSPARENT_SWITCHES_INDEX = 76
  21. #举例:第一个为true,第二个为20,则打开20号开关,后面的人都没了。
  22. #跟随人数的最大数目,可以更改为2、3什么的。
  23. TRAIN_ACTOR_SIZE_MAX = 4
  24. # 定数
  25. #Input::DOWN = 2
  26. #Input::LEFT = 4
  27. #Input::RIGHT = 6
  28. #Input::UP = 6
  29. DOWN_LEFT = 1
  30. DOWN_RIGHT = 3
  31. UP_LEFT = 7
  32. UP_RIGHT = 9
  33. JUMP = 5

  34. class Game_Party_Actor < Game_Character
  35. def initialize
  36. super()
  37. @through = true
  38. end
  39. def setup(actor)
  40. # キャラクターのファイル名と色相を設定
  41. if actor != nil
  42. @character_name = actor.character_name
  43. @character_hue = actor.character_hue
  44. if moving?
  45. if @character_name.split(/△/)[1] == nil         
  46. if @character_name.split(/▲/)[1] == nil
  47. @character_name = ""+@character_name
  48. end
  49. end
  50. else
  51. if @character_name.split(/△/)[1] == nil
  52. if @character_name.split(/▲/)[1] != nil
  53. @character_name = @character_name.split(/▲/)[1]
  54. end
  55. end
  56. end
  57. else
  58. @character_name = ""
  59. @character_hue = 0
  60. end
  61. # 不透明度と合成方法を初期化
  62. @opacity = 255
  63. @blend_type = 0
  64. end
  65. def screen_z(height = 0)
  66. if $game_player.x == @x and $game_player.y == @y
  67. return $game_player.screen_z(height) - 1
  68. end
  69. super(height)
  70. end
  71. #--------------------------------------------------------------------------
  72. # ● 下に移動
  73. # turn_enabled : その場での向き変更を許可するフラグ
  74. #--------------------------------------------------------------------------
  75. def move_down(turn_enabled = true)
  76. # 下を向く
  77. if turn_enabled
  78. turn_down
  79. end
  80. # 通行可能な場合
  81. if passable?(@x, @y, Input::DOWN)
  82. # 下を向く
  83. turn_down
  84. # 座標を更新
  85. @y += 1
  86. end
  87. end
  88. #--------------------------------------------------------------------------
  89. # ● 左に移動
  90. # turn_enabled : その場での向き変更を許可するフラグ
  91. #--------------------------------------------------------------------------
  92. def move_left(turn_enabled = true)
  93. # 左を向く
  94. if turn_enabled
  95. turn_left
  96. end
  97. # 通行可能な場合
  98. if passable?(@x, @y, Input::LEFT)
  99. # 左を向く
  100. turn_left
  101. # 座標を更新
  102. @x -= 1
  103. end
  104. end
  105. #--------------------------------------------------------------------------
  106. # ● 右に移動
  107. # turn_enabled : その場での向き変更を許可するフラグ
  108. #--------------------------------------------------------------------------
  109. def move_right(turn_enabled = true)
  110. # 右を向く
  111. if turn_enabled
  112. turn_right
  113. end
  114. # 通行可能な場合
  115. if passable?(@x, @y, Input::RIGHT)
  116. # 右を向く
  117. turn_right
  118. # 座標を更新
  119. @x += 1
  120. end
  121. end
  122. #--------------------------------------------------------------------------
  123. # ● 上に移動
  124. # turn_enabled : その場での向き変更を許可するフラグ
  125. #--------------------------------------------------------------------------
  126. def move_up(turn_enabled = true)
  127. # 上を向く
  128. if turn_enabled
  129. turn_up
  130. end
  131. # 通行可能な場合
  132. if passable?(@x, @y, Input::UP)
  133. # 上を向く
  134. turn_up
  135. # 座標を更新
  136. @y -= 1
  137. end
  138. end
  139. #--------------------------------------------------------------------------
  140. # ● 左下に移動
  141. #--------------------------------------------------------------------------
  142. def move_lower_left
  143. # 向き固定でない場合
  144. unless @direction_fix
  145. # 右向きだった場合は左を、上向きだった場合は下を向く
  146. @direction = 1#(@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
  147. end
  148. # 下→左、左→下 のどちらかのコースが通行可能な場合
  149. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  150. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  151. # 座標を更新
  152. @x -= 1
  153. @y += 1
  154. end
  155. end
  156. #--------------------------------------------------------------------------
  157. # ● 右下に移動
  158. #--------------------------------------------------------------------------
  159. def move_lower_right
  160. # 向き固定でない場合
  161. unless @direction_fix
  162. # 左向きだった場合は右を、上向きだった場合は下を向く
  163. @direction = 3#(@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
  164. end
  165. # 下→右、右→下 のどちらかのコースが通行可能な場合
  166. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  167. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  168. # 座標を更新
  169. @x += 1
  170. @y += 1
  171. end
  172. end
  173. #--------------------------------------------------------------------------
  174. # ● 左上に移動
  175. #--------------------------------------------------------------------------
  176. def move_upper_left
  177. # 向き固定でない場合
  178. unless @direction_fix
  179. # 右向きだった場合は左を、下向きだった場合は上を向く
  180. @direction = 7#(@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
  181. end
  182. # 上→左、左→上 のどちらかのコースが通行可能な場合
  183. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  184. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  185. # 座標を更新
  186. @x -= 1
  187. @y -= 1
  188. end
  189. end
  190. #--------------------------------------------------------------------------
  191. # ● 右上に移動
  192. #--------------------------------------------------------------------------
  193. def move_upper_right
  194. # 向き固定でない場合
  195. unless @direction_fix
  196. # 左向きだった場合は右を、下向きだった場合は上を向く
  197. @direction = 9#(@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
  198. end
  199. # 上→右、右→上 のどちらかのコースが通行可能な場合
  200. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  201. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  202. # 座標を更新
  203. @x += 1
  204. @y -= 1
  205. end
  206. end
  207. attr_writer :move_speed
  208. attr_writer :step_anime
  209. end
  210. module Spriteset_Map_Module
  211. def setup_actor_character_sprites?
  212. return @setup_actor_character_sprites_flag != nil
  213. end
  214. def setup_actor_character_sprites(characters)
  215. if !setup_actor_character_sprites?
  216. index_game_player = 0
  217. @character_sprites.each_index do |i|
  218. if @character_sprites[i].character.instance_of?(Game_Player)
  219. index_game_player = i
  220. break
  221. end
  222. end
  223. for character in characters.reverse
  224. @character_sprites.unshift(
  225. Sprite_Character.new(@viewport1, character)
  226. )
  227. end
  228. @setup_actor_character_sprites_flag = true
  229. end
  230. end
  231. end
  232. module Scene_Map_Module
  233. def setup_actor_character_sprites(characters)
  234. @spriteset.setup_actor_character_sprites(characters)
  235. end
  236. end
  237. module Game_Party_Module
  238. def set_transparent_actors(transparent)
  239. @transparent = transparent
  240. end
  241. def return_char(i)
  242. return @characters[i]
  243. end
  244. def setup_actor_character_sprites
  245. if @characters == nil
  246. @characters = []
  247. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  248. @characters.push(Game_Party_Actor.new)
  249. end
  250. end
  251. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  252. @characters[i - 1].setup(actors[i])
  253. end
  254. if $scene.class.method_defined?('setup_actor_character_sprites')
  255. $scene.setup_actor_character_sprites(@characters)
  256. end
  257. end
  258. def update_party_actors
  259. setup_actor_character_sprites
  260. transparent = $game_player.transparent
  261. if transparent == false
  262. if TRANSPARENT_SWITCH
  263. transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
  264. end
  265. end
  266. for character in @characters
  267. character.transparent = transparent
  268. character.move_speed = $game_player.move_speed
  269. character.step_anime = $game_player.step_anime
  270. character.update
  271. end
  272. end
  273. def moveto_party_actors( x, y )
  274. setup_actor_character_sprites
  275. for character in @characters
  276. character.moveto( x, y )
  277. end
  278. if @move_list == nil
  279. @move_list = []
  280. end
  281. move_list_setup
  282. end
  283. def move_party_actors
  284. if @move_list == nil
  285. @move_list = []
  286. move_list_setup
  287. end
  288. @move_list.each_index do |i|
  289. if @characters[i] != nil
  290. case @move_list[i].type
  291. when Input::DOWN
  292. @characters[i].move_down(@move_list[i].args[0])
  293. when Input::LEFT
  294. @characters[i].move_left(@move_list[i].args[0])
  295. when Input::RIGHT
  296. @characters[i].move_right(@move_list[i].args[0])
  297. when Input::UP
  298. @characters[i].move_up(@move_list[i].args[0])
  299. when DOWN_LEFT
  300. @characters[i].move_lower_left
  301. when DOWN_RIGHT
  302. @characters[i].move_lower_right
  303. when UP_LEFT
  304. @characters[i].move_upper_left
  305. when UP_RIGHT
  306. @characters[i].move_upper_right
  307. when JUMP
  308. @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
  309. end
  310. end
  311. end
  312. end
  313. class Move_List_Element
  314. def initialize(type,args)
  315. @type = type
  316. @args = args
  317. end
  318. def type() return @type end
  319. def args() return @args end
  320. end
  321. def move_list_setup
  322. for i in 0 .. TRAIN_ACTOR_SIZE_MAX
  323. @move_list[i] = nil
  324. end
  325. end
  326. def add_move_list(type,*args)
  327. @move_list.unshift(Move_List_Element.new(type,args)).pop
  328. end
  329. def move_down_party_actors(turn_enabled = true)
  330. move_party_actors
  331. add_move_list(Input::DOWN,turn_enabled)
  332. end
  333. def move_left_party_actors(turn_enabled = true)
  334. move_party_actors
  335. add_move_list(Input::LEFT,turn_enabled)
  336. end
  337. def move_right_party_actors(turn_enabled = true)
  338. move_party_actors
  339. add_move_list(Input::RIGHT,turn_enabled)
  340. end
  341. def move_up_party_actors(turn_enabled = true)
  342. move_party_actors
  343. add_move_list(Input::UP,turn_enabled)
  344. end
  345. def move_lower_left_party_actors
  346. move_party_actors
  347. add_move_list(DOWN_LEFT)
  348. end
  349. def move_lower_right_party_actors
  350. move_party_actors
  351. add_move_list(DOWN_RIGHT)
  352. end
  353. def move_upper_left_party_actors
  354. move_party_actors
  355. add_move_list(UP_LEFT)
  356. end
  357. def move_upper_right_party_actors
  358. move_party_actors
  359. add_move_list(UP_RIGHT)
  360. end
  361. def jump_party_actors(x_plus, y_plus)
  362. move_party_actors
  363. add_move_list(JUMP,x_plus, y_plus)
  364. end
  365. end
  366. module Game_Player_Module
  367. def update
  368. $game_party.update_party_actors
  369. super
  370. end
  371. def moveto( x, y )
  372. $game_party.moveto_party_actors( x, y )
  373. super( x, y )
  374. end
  375. def move_down(turn_enabled = true)
  376. if passable?(@x, @y, Input::DOWN)
  377. $game_party.move_down_party_actors(turn_enabled)
  378. end
  379. super(turn_enabled)
  380. end
  381. def move_left(turn_enabled = true)
  382. if passable?(@x, @y, Input::LEFT)
  383. $game_party.move_left_party_actors(turn_enabled)
  384. end
  385. super(turn_enabled)
  386. end
  387. def move_right(turn_enabled = true)
  388. if passable?(@x, @y, Input::RIGHT)
  389. $game_party.move_right_party_actors(turn_enabled)
  390. end
  391. super(turn_enabled)
  392. end
  393. def move_up(turn_enabled = true)
  394. if passable?(@x, @y, Input::UP)
  395. $game_party.move_up_party_actors(turn_enabled)
  396. end
  397. super(turn_enabled)
  398. end
  399. def move_lower_left
  400. # 下→左、左→下 のどちらかのコースが通行可能な場合
  401. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  402. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  403. $game_party.move_lower_left_party_actors
  404. end
  405. super
  406. end
  407. def move_lower_right
  408. # 下→右、右→下 のどちらかのコースが通行可能な場合
  409. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  410. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  411. $game_party.move_lower_right_party_actors
  412. end
  413. super
  414. end
  415. def move_upper_left
  416. # 上→左、左→上 のどちらかのコースが通行可能な場合
  417. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  418. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  419. $game_party.move_upper_left_party_actors
  420. end
  421. super
  422. end
  423. def move_upper_right
  424. # 上→右、右→上 のどちらかのコースが通行可能な場合
  425. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  426. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  427. $game_party.move_upper_right_party_actors
  428. end
  429. super
  430. end
  431. def jump(x_plus, y_plus)
  432. # 新しい座標を計算
  433. new_x = @x + x_plus
  434. new_y = @y + y_plus
  435. # 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
  436. if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
  437. $game_party.jump_party_actors(x_plus, y_plus)
  438. end
  439. super(x_plus, y_plus)
  440. end
  441. attr_reader :move_speed
  442. attr_reader :step_anime
  443. end
  444. end # module Train_Actor
  445. class Game_Party
  446. include Train_Actor::Game_Party_Module
  447. end
  448. class Game_Player
  449. include Train_Actor::Game_Player_Module
  450. end
  451. class Spriteset_Map
  452. include Train_Actor::Spriteset_Map_Module
  453. end
  454. class Scene_Map
  455. include Train_Actor::Scene_Map_Module
  456. end

  457. #==============================================================================
  458. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  459. #==============================================================================
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
56 小时
注册时间
2011-1-1
帖子
28
5
 楼主| 发表于 2012-11-2 20:20:05 | 只看该作者
……我用的是伪八方向,第一个加进去没作用,第二个加进去有效果,但在往左下走时跟随的人就消失,求解!
TAT寒假这么快就过完了啊啊啊啊啊!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
465 小时
注册时间
2011-4-13
帖子
174
6
发表于 2012-11-3 17:39:38 | 只看该作者
……你可以用脚本的八方向啊
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
56 小时
注册时间
2011-1-1
帖子
28
7
 楼主| 发表于 2012-11-18 12:26:49 | 只看该作者
Wind2010 发表于 2012-10-27 18:52

啥意思?插在哪?求用法

点评

随意地方,然后事件-移动规则-自定义-脚本「move_toward($game_player)」  发表于 2012-11-25 18:11
TAT寒假这么快就过完了啊啊啊啊啊!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-1 14:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表