Project1

标题: [已解决]Game_Actor类当中取得战斗画面的X,Y,Z坐标在什么地方 [打印本页]

作者: miantouchi    时间: 2019-4-14 20:42
标题: [已解决]Game_Actor类当中取得战斗画面的X,Y,Z坐标在什么地方
本帖最后由 miantouchi 于 2019-4-16 19:42 编辑

Game_Actor类图片中位置可以改玩家角色的战斗坐标,screen_x,screen_y,screen_z这三个函数是从哪里调用的呢?找了半天也没找到他们的上级调用部门。
另外这代码是改一个角色,其他角色也跟着改了,是不是找到他们上级调用地方就更,随便更改他们每个角色的位置了?

1.png (62.24 KB, 下载次数: 9)

1.png

作者: 活气寒露    时间: 2019-4-14 20:45
  1. #--------------------------------------------------------------------------
  2.   # ● 取得战斗画面的 X 坐标
  3.   #--------------------------------------------------------------------------
  4.   def screen_x
  5.      case self.index
  6.     when 0
  7.       return 415
  8.     when 1
  9.       return 435
  10.     when 2
  11.       return 315
  12.     when 3
  13.       return 555
  14.     else
  15.       return 600
  16.     end
  17.   end
复制代码

用自身的索引id返回其他的值就可以了
作者: KB.Driver    时间: 2019-4-15 13:15
VA里的话是Spriteset_Battle里用来根据对象模型决定精灵位置的
XP如果有同名类的话也是一样
作者: guoxiaomi    时间: 2019-4-15 17:22
ctrl+shift+F 全局搜索
作者: miantouchi    时间: 2019-4-15 23:03
本帖最后由 miantouchi 于 2019-4-15 23:14 编辑

让大家久等了,思考了很久,才回的帖子,希望帮我看看解答下。这几张图的顺序就是我思路分析的顺序,最后一张除外。
问题1:Sprite_Battler类的实例我没有找到,他的实例是@actor_sprites这个数组元素吗?
问题2:Sprite_Battler类里面@battler这个我很不理解,他为什么能调用screen_x,screen_y,screen_z,@battler.battler_name,@battler.battler_hue等等
问题3: Spriteset_Battle类当中@actor_sprites[0].battle当中意思是调用Sprite_Battler类里面的@battle变量,然后把$game_party.actors[0]赋值给他吗?
    @actor_sprites[0].battler = $game_party.actors[0]
    @actor_sprites[1].battler = $game_party.actors[1]
    @actor_sprites[2].battler = $game_party.actors[2]
    @actor_sprites[3].battler = $game_party.actors[3]
问题4:Game_Actor类最下面是调图片坐标位置的,我通过这几步分析怎么也分析不到这块来,只能分析到Spriteset_Battle和Sprite_Battler类这块,也就是我开始问的第二个问题。

1.png (69.62 KB, 下载次数: 11)

1.png

2.png (77.33 KB, 下载次数: 12)

2.png

3.png (66.63 KB, 下载次数: 10)

3.png

4.png (70.3 KB, 下载次数: 10)

4.png

5.jpg (113.36 KB, 下载次数: 9)

5.jpg

作者: miantouchi    时间: 2019-4-15 23:12
guoxiaomi 发表于 2019-4-15 17:22
ctrl+shift+F 全局搜索

其实我一开始就用全局搜索了,我分别搜索了screen_x,screen_y,screen_z
我正常的思路是搜索出来Game_Actor类的实例,$game_actor.screen_x,$game_actor.screen_y,$game_actor.screen_z这样的字样,
可以没有找到。
我经过前几天的学习,想到Game_Actor类的实例是通过,$game_actors[id]这个形式获得了,我又开始找
$game_actors[id].screen_x,
$game_actors[id].screen_y,
$game_actors[id].screen_z
可惜也失败了没有找到,最后我通过大家回复通过正向思维分析卡在了Spriteset_Battle和Sprite_Battler这块。就是上楼的内容

6.jpg (113.48 KB, 下载次数: 10)

6.jpg

作者: guoxiaomi    时间: 2019-4-15 23:52
miantouchi 发表于 2019-4-15 23:12
其实我一开始就用全局搜索了,我分别搜索了screen_x,screen_y,screen_z
我正常的思路是搜索出来Game_Act ...

亲测可以得到 $game_actors[id].screen_x,前提当然是你的id不能为0,对应的 Game_Actor 对象存在

作者: 芯☆淡茹水    时间: 2019-4-16 07:23
这些不都是 Sprite_Battler 的实例么


@actor_sprites 或 @enemy_sprites 只是储存这些实例的数组而已。

Sprite_Battler  里面的类变量 @battler 储存着其对应的 战斗者 对象(Game_Actor 或 Game_Enemy)


可以在生成 Sprite_Battler 时代入


也可以随时侦测更改


所以照此推理,你要找的 画面坐标 就是这个

作者: 灯笼菜刀王    时间: 2019-4-16 10:26
本帖最后由 灯笼菜刀王 于 2019-4-16 10:28 编辑

战斗场景的调用可是环环相扣的

首先,进入战斗,切换战斗场景 $scene = Scene_Battle.new

然后, 战斗场景的图像显示全部来自 @spriteset = Spriteset_Battle.new

然后, Spriteset_Battle 分别调用 背景(Sprite.new), 战斗者(Sprite_Battler.new),天气(RPG::Weather.new), 显示的图片(Sprite_Picture.new), 计时器(Sprite_Timer.new)

战斗者就像上面芯大划出来的, 每一个战斗单位都调用一个战斗者实例,然后塞到 @enemy_sprites = [] 和 @actor_sprites = [] 里面

在Sprite_Battler里, 初始化的地方 def initialize(viewport, battler = nil) ,就有战斗者的参数接口, 而这个参数, 就是在 Spriteset_Battle 里, 芯大划线的地方, 赋予了 game_enemy 和 game_actors 的实例(保存到 @battler 这个实变量里)

所以, 它自然可以通过 @battler 来调用game_enemy 和 game_actors 的方法( 它们的老爸 game_battler 的方法当然也可以调用)

细节楼上的大佬们都详细解释了, 咱就不提了XD
作者: miantouchi    时间: 2019-4-16 12:45
本帖最后由 miantouchi 于 2019-4-16 12:48 编辑

Sprite_Battler  里面的类变量 @battler 储存着其对应的 战斗者 对象(Game_Actor 或 Game_Enemy)这句话不太理解,是怎么得出这个结论的
是传入@viewport1,@viewport2这两个视窗的原因吗?
Sprite_Battler.new(@viewport1, enemy) 是敌人对象Game_Enemy
Sprite_Battler.new(@viewport2)                是角色对象Game_Actor

我现在的理解程度
$game_actors[id]的角色对象是Game_Actor

a=Game_Enemy.new()
这么写我能理解a是敌人对象Game_Enemy

现在系统Sprite_Battler.new这么个写法我就不知道了,就理解不了他指的对象了,没有Game_Actor,Game_Enemy一点迹象。

简单粗暴不从语法上讲,下面这样写我能理解他俩的对象是谁。
a=Game_Enemy.new()
b=Game_Actor.new()

1.jpg (187.39 KB, 下载次数: 17)

1.jpg

作者: 灯笼菜刀王    时间: 2019-4-16 14:28
本帖最后由 灯笼菜刀王 于 2019-4-16 14:31 编辑
miantouchi 发表于 2019-4-16 12:45
Sprite_Battler  里面的类变量 @battler 储存着其对应的 战斗者 对象(Game_Actor 或 Game_Enemy)这句话不 ...


在Sprite_Battler里, 初始化是这样写的  def initialize(viewport, battler = nil)  这里, battler 这个参数,缺省的时候, 就表示使用默认值(nil)

所以, Sprite_Battler.new(@viewport2)  这个, 是表示调用 Sprite_Battler 的实例, 只给予视口参数, 战斗者是缺省的, 为什么缺省呢, 看下面的 def update

在 update 这里, 才会把主角队伍的角色(game_actors的实例) 赋值给了 前面已经安排好的 @actor_sprites[].battler , 这样写法, 是方便"战斗中换队员"这种系统的实现

--------------------------------
a =  你能理解它是变量对象,   f = []; f[0] =  你就无法理解它是变量对象了?

如果无法理解, 那再去复习基础教程,  你这里提的问题 第一个是基础教程:方法的定义,  第二个是基础教程 :数组的单位调用,  先巩固好基础啊骚年




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