Bonjour à tous,
J'ai un problème avec ce script qui permet de faire un jeu de plateformes.
Le problème est tout con, mais pourtant tellement bizarre que je vais m'appliquer à bien vous l'expliquer
Je pense que beaucoup d'entre vous l'ont croisé, c'est un truc qui permet de sauter avec la touche A, et... et c'est tout. Le héros retombe, il ne se déplace pas comme d'habitude, il marche sur une ligne horizontale.
Bref, le problème, c'est que je me sert d'une texture de mur comme sol, là ou marche le héros, et je la défini comme "impraticable", sinon le héros, et cela vient du script, tomberai jusqu'en bas de la map.
Ca c'est ok, mais allez savoir pourquoi, je fait face à des trucs complétement débiles :
1) Quand j'appuie sur Ctrl, le héros traverse le sol (il se dirige donc vers le bas, ignorant toute surface "impraticable").
Solution recherchée : désactiver cette touche Ctrl, tout simplement.
2 ) Quand je saute, le phénomène est similaire, mais vers le haut. Disons que je fait un saut vers un mur, et que je me mets à appuyer à répétition sur A, le héros sautera à l'intérieur du mur, pouvant même être
dirigé, allant vers le haut, à gauche, à droite, et pouvant bien sûr le traverser vers le bas en appuyant sur Ctrl.
Solution recherchée : J'en sais rien... On ne va pas désactiver la touche pour sauter quand même
3 ) Celui-ci est aussi très chiant. Imaginez, je suis sur une surface de trois carreaux, il y a un vide devant, et je cherche à sauter sur la prochaine plateforme.
J'avance, et le héros est dans l'incapacité de sauter sur le dernier carreau d'une surface. Il peut le faire sur place, oui, mais si je veux avancer et sauter au dernier moment vers l'avant, impossible.
Voilà, j'ai fait un roman pour un problème somme toute assez ridicule, et je m'en excuse, mais j'ai voulu être le plus clair possible.
Le mieux est encore de tester par vous-même le script, que voici.
Je vous remercie de m'avoir lu
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# ▼▲▼ XRXS50. Action-Maps XC. ▼▲▼ built 033010
# by 桜雅 在土
#======================================================
# □ カスタマイズポイント
#======================================================
class XRXS50
#
# Action-Maps を稼動させるマップIDの配列
#
ENABLE_FULL_ACTY_MAPS = [1, 2 , 3 , 5 , 6 , 7 , 8 , 9 ,10 , 11 , 12 , 13]
#
# 「斜め降下」
#
ENABLE_SLIDE_DESCENT = true
#
# 向きジャンプ(true : 向いている方向へジャンプ。
# false : キーが押されている方向へジャンプ。
#
JUMP_AS_KEY = false
end
#======================================================
# ■ Game_Player
#======================================================
class Game_Player < Game_Character
#------------------------------------------------------
# ○ 公開インスタンス変数
#------------------------------------------------------
# 既存
attr_writer :direction_fix
attr_accessor :walk_anime
# 新規
attr_accessor :now_jumps
attr_writer :xrxs50_direction_sidefix
#------------------------------------------------------
# ○ 最大ジャンプ回数
#------------------------------------------------------
def max_jumps
return 1
end
#------------------------------------------------------
# ● 左を向く
#------------------------------------------------------
alias xrxs50_turn_left turn_left
def turn_left
if @xrxs50_direction_sidefix
@direction = 4
else
xrxs50_turn_left
end
end
#------------------------------------------------------
# ● 右を向く
#------------------------------------------------------
alias xrxs50_turn_right turn_right
def turn_right
if @xrxs50_direction_sidefix
@direction = 6
else
xrxs50_turn_right
end
end
end
#======================================================
# ■ Scene_Map
#======================================================
class Scene_Map
#------------------------------------------------------
# ● メイン処理
#------------------------------------------------------
alias xrxs50_main main
def main
# チェック
xrxs50_enable_check
# 呼び戻す
xrxs50_main
end
#------------------------------------------------------
# ● フレーム更新
#------------------------------------------------------
alias xrxs50_update update
def update
# 呼び戻す
xrxs50_update
# フレーム更新 (座標系更新
if @xrxs50_enable
update_coordinates
end
end
#------------------------------------------------------
# ○ フレーム更新 (座標系更新
#------------------------------------------------------
def update_coordinates
# if $game_player.passable?($game_player.x,$game_player.y,2)
if $game_player.passable?($game_player.x,$game_player.y+1)
unless $game_player.moving?
# if XRXS50::ENABLE_SLIDE_DESCENT and Input.press?(Input::RIGHT) and $game_player.passable?($game_player.x,$game_player.y+1,6)
if XRXS50::ENABLE_SLIDE_DESCENT and Input.press?(Input::RIGHT) and $game_player.passable?($game_player.x+1,$game_player.y+1)
$game_player.move_lower_right
# elsif XRXS50::ENABLE_SLIDE_DESCENT and Input.press?(Input::LEFT) and $game_player.passable?($game_player.x,$game_player.y+1,4)
elsif XRXS50::ENABLE_SLIDE_DESCENT and Input.press?(Input::LEFT) and $game_player.passable?($game_player.x-1,$game_player.y+1)
$game_player.move_lower_left
else
$game_player.move_down
end
end
else
$game_player.move_down
$game_player.walk_anime = true unless $game_player.walk_anime
$game_player.now_jumps = 0
if Input.trigger?(Input::X) and $game_player.now_jumps < $game_player.max_jumps
if XRXS50::JUMP_AS_KEY
direction = $game_player.direction == 4 ? -1 : 1
else
if Input.press?(Input::RIGHT)
direction = 1
elsif Input.press?(Input::LEFT)
direction = -1
else
direction = 0
end
end
$game_player.jump(direction, -2)
$game_player.now_jumps += 1
$game_player.walk_anime = false
end
end
end
#------------------------------------------------------
# ● プレイヤーの場所移動
#------------------------------------------------------
#alias xrxs50_transfer_player transfer_player
alias xrxs50_transfer_player update_transfer_player
def update_transfer_player
#def transfer_player
# 呼び戻す
xrxs50_transfer_player
# チェック
xrxs50_enable_check
end
#------------------------------------------------------
# ○ XRXS50 が稼動するか判定
#------------------------------------------------------
def xrxs50_enable_check
if XRXS50::ENABLE_FULL_ACTY_MAPS.include?($game_map.map_id)
$game_player.now_jumps = 0 if $game_player.now_jumps.nil?
@xrxs50_enable = true
$game_player.direction_fix = true
$game_player.xrxs50_direction_sidefix = true
else
@xrxs50_enable = false
$game_player.direction_fix = false
$game_player.xrxs50_direction_sidefix = false
end
end
end