Le monde des dragons
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Le monde des dragons

RPG
 
AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  
Le Deal du moment :
Code promo Nike : -25% dès 50€ ...
Voir le deal

 

 déplacement pixel par pixel et en diagonal

Aller en bas 
2 participants
AuteurMessage
mimiman
Nouveau



Nombre de messages : 2
Localisation : dans une petite maison dans la campagne
Date d'inscription : 29/10/2005

déplacement pixel par pixel et en diagonal Empty
MessageSujet: déplacement pixel par pixel et en diagonal   déplacement pixel par pixel et en diagonal EmptySam 29 Oct à 10:54

aller dans l'éditeur de script et faite un nouveau script au dessu de main, vous le nommer comme vous voulez, et vous entrez ce code:

# ■ XRXS22. Systême de déplacement par pixel.
# Par 桜雅 在土.

#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# ● Initialisation
#--------------------------------------------------------------------------
alias xrxs22_initialize initialize
def initialize
xrxs22_initialize
@step_count_decimal = 0.00
@offsetable = 0.375
end
#--------------------------------------------------------------------------
# ● Possibilité de passage
# distance : longueur de migration
#--------------------------------------------------------------------------
def xc_passable?(x, y, d)
# La nouvelle coordonnée est calculée
case d
when 2
y += $fineness
when 4
x -= $fineness
when 6
x += $fineness
when 8
y -= $fineness
when 1
x -= $fineness
y += $fineness
when 3
x += $fineness
y += $fineness
when 7
x -= $fineness
y -= $fineness
when 9
x += $fineness
y -= $fineness
end
new_x1 = x.floor
new_x2 = x.ceil
new_y1 = y.floor
new_y2 = y.ceil
if ((($game_player.x == new_x1 and $game_player.y == new_y1) or passable?(new_x1, new_y1, 0)) and
(($game_player.x == new_x2 and $game_player.y == new_y1) or passable?(new_x2, new_y1, 0)) and
(($game_player.x == new_x1 and $game_player.y == new_y2) or passable?(new_x1, new_y2, 0)) and
(($game_player.x == new_x2 and $game_player.y == new_y2) or passable?(new_x2, new_y2, 0)))
return true
end
return false
end
#--------------------------------------------------------------------------
# ● Déplacement vers le bas
#--------------------------------------------------------------------------
def move_down(turn_enabled = true)
# Vers la direction basse du regard actuel
if turn_enabled
turn_down
end
# Vers la direction basse du regard actuel
turn_down
# Si le déplacement est possible
if xc_passable?(@x, @y, 2)
# Renouvellement des coordonnées
@y += $fineness
# Augmentation des pas
@step_count_decimal += $fineness
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch(@x.round, (@y + $fineness).ceil)
# Glissement
if @x%1 <= @offsetable and passable?(@x.floor, @y + 1, 0)
move_left(turn_enabled)
elsif @x%1 >= 1-@offsetable and passable?(@x.ceil, @y + 1, 0)
move_right(turn_enabled)
end
end
end
#--------------------------------------------------------------------------
# ● Déplacement vers la gauche
#--------------------------------------------------------------------------
def move_left(turn_enabled = true)
# Vers la direction gauche du regard actuel
if turn_enabled
turn_left
end
# Vers la direction gauche du regard actuel
turn_left
# Si le déplacement est possible
if xc_passable?(@x, @y, 4)
# Renouvellement des coordonnées
@x -= $fineness
# Augmentation des pas
@step_count_decimal += $fineness
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch((@x - $fineness).floor, @y.round)
# Glissement
if @y%1 <= @offsetable and passable?(@x - 1, @y.floor, 0)
move_up(turn_enabled)
elsif @y%1 >= 1-@offsetable and passable?(@x - 1, @y.ceil, 0)
move_down(turn_enabled)
end
end
end
#--------------------------------------------------------------------------
# ● Déplacement vers la droite
# turn_enabled : Le drapeau qui permet la modification de direction à
# cet endroit
#--------------------------------------------------------------------------
def move_right(turn_enabled = true)
# Vers la direction droite du regard actuel
if turn_enabled
turn_right
end
# Vers la direction droite du regard actuel
turn_right
# Si le déplacement est possible
if xc_passable?(@x, @y, 6)
# Renouvellement des coordonnées
@x += $fineness
# Augmentation des pas
@step_count_decimal += $fineness
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch((@x + $fineness).floor, @y.round)
# Glissement
if @y%1 <= @offsetable and passable?(@x.floor + 1, @y.floor, 0)
move_up(turn_enabled)
elsif @y%1 >= 1-@offsetable and passable?(@x.floor + 1, @y.ceil, 0)
move_down(turn_enabled)
end
end
end
#--------------------------------------------------------------------------
# ● Déplacement vers le haut
# turn_enabled : Le drapeau qui permet la modification de direction à
# cet endroit
#--------------------------------------------------------------------------
def move_up(turn_enabled = true)
# Vers la direction haute du regard actuel
if turn_enabled
turn_up
end
# Vers la direction haute du regard actuel
turn_up
# Si le déplacement est possible
if xc_passable?(@x, @y, Cool
# Renouvellement des coordonnées
@y -= $fineness
# Augmentation des pas
@step_count_decimal += $fineness
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch(@x.round, (@y - $fineness).ceil)
# Glissement
if @x%1 <= @offsetable and passable?(@x.floor, @y - 1, 0)
move_left(turn_enabled)
elsif @x%1 >= 1-@offsetable and passable?(@x.ceil, @y - 1, 0)
move_right(turn_enabled)
end
end
end
#--------------------------------------------------------------------------
# ● Déplacement vers la diagonale bas-gauche
#--------------------------------------------------------------------------
def move_lower_left
# 向き固定でない場合
unless @direction_fix
# 右向きだった場合は左を、上向きだった場合は下を向く
@direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
end
stepped = false
# Si le déplacement est possible
if xc_passable?(@x, @y, 1)
# Renouvellement des coordonnées
@x -= $fineness
@y += $fineness
stepped = true
elsif xc_passable?(@x, @y, 4)
@x -= $fineness
stepped = true
elsif xc_passable?(@x, @y, 2)
@y += $fineness
stepped = true
# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch((@x - $fineness).round, (@y + $fineness).ceil)
end
# Augmentation des pas
@step_count_decimal += $fineness if stepped
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
end
#--------------------------------------------------------------------------
# ● Déplacement vers la diagonale bas-droite
#--------------------------------------------------------------------------
def move_lower_right
# 向き固定でない場合
unless @direction_fix
# 左向きだった場合は右を、上向きだった場合は下を向く
@direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
end
stepped = false
# Si le déplacement est possible
if xc_passable?(@x, @y, 3)
# Renouvellement des coordonnées
@x += $fineness
@y += $fineness
stepped = true
elsif xc_passable?(@x, @y, 6)
@x += $fineness
stepped = true
elsif xc_passable?(@x, @y, 2)
@y += $fineness
stepped = true
# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch((@x + $fineness).ceil, (@y + $fineness).ceil)
end
Revenir en haut Aller en bas
mimiman
Nouveau



Nombre de messages : 2
Localisation : dans une petite maison dans la campagne
Date d'inscription : 29/10/2005

déplacement pixel par pixel et en diagonal Empty
MessageSujet: Re: déplacement pixel par pixel et en diagonal   déplacement pixel par pixel et en diagonal EmptySam 29 Oct à 10:55

SUITE


# Augmentation des pas
@step_count_decimal += $fineness if stepped
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
end
#--------------------------------------------------------------------------
# ● Déplacement vers la diagonale haut-gauche
#--------------------------------------------------------------------------
def move_upper_left
# 向き固定でない場合
unless @direction_fix
# 右向きだった場合は左を、下向きだった場合は上を向く
@direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
end
# Si le déplacement est possible
if xc_passable?(@x, @y, 7)
# Renouvellement des coordonnées
@x -= $fineness
@y -= $fineness
stepped = true
elsif xc_passable?(@x, @y, 4)
@x -= $fineness
stepped = true
elsif xc_passable?(@x, @y, Cool
@y -= $fineness
stepped = true
# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch((@x - $fineness).floor, (@y - $fineness).floor)
end
# Augmentation des pas
@step_count_decimal += $fineness if stepped
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
end
#--------------------------------------------------------------------------
# ● Déplacement vers la diagonale haut-droite
#--------------------------------------------------------------------------
def move_upper_right
# 向き固定でない場合
unless @direction_fix
# 左向きだった場合は右を、下向きだった場合は上を向く
@direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
end
# Si le déplacement est possible
if xc_passable?(@x, @y, 9)
# Renouvellement des coordonnées
@x += $fineness
@y -= $fineness
stepped = true
elsif xc_passable?(@x, @y, 6)
@x += $fineness
stepped = true
elsif xc_passable?(@x, @y, Cool
@y -= $fineness
stepped = true
# Si le déplacement est impossible
else
# Début de la décision du contact de l'évènement
#+ Ouais, ça veut pas dire grand chose. En fait, le script regarde si le
#+ protagoniste touche un évènement.
check_event_trigger_touch((@x + $fineness).ceil, (@y - $fineness).floor)
end
# Augmentation des pas
@step_count_decimal += $fineness if stepped
if @step_count_decimal >= 1
increase_steps
@step_count_decimal -= 1
end
end
end
#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● 同位置のイベント起動判定
#--------------------------------------------------------------------------
def check_event_trigger_here(triggers)
result = false
# イベント実行中の場合
if $game_system.map_interpreter.running?
return result
end
# 全イベントのループ
for event in $game_map.events.values
# イベントの座標とトリガーが一致した場合
if event.x == @x.round and event.y == @y.round and triggers.include?(event.trigger)
# ジャンプ中以外で、起動判定が同位置のイベントなら
if not event.jumping? and event.over_trigger?
event.start
result = true
end
end
end
return result
end
#--------------------------------------------------------------------------
# ● 正面のイベント起動判定
#--------------------------------------------------------------------------
def check_event_trigger_there(triggers)
result = false
# イベント実行中の場合
if $game_system.map_interpreter.running?
return result
end
# 正面の座標を計算
new_x = @x.round + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y = @y.round + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# 全イベントのループ
for event in $game_map.events.values
# イベントの座標とトリガーが一致した場合
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# ジャンプ中以外で、起動判定が正面のイベントなら
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
# 該当するイベントが見つからなかった場合
if result == false
# 正面のタイルがカウンターなら
if $game_map.counter?(new_x, new_y)
# 1 タイル奥の座標を計算
new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# 全イベントのループ
for event in $game_map.events.values
# イベントの座標とトリガーが一致した場合
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# ジャンプ中以外で、起動判定が正面のイベントなら
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
end
end
return result
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ローカル変数に移動中かどうかを記憶
last_moving = moving?
# 移動の細かさ(基本的に固定、変更した場合は歩数増加部分も変更のこと)
if @x%1 == 0.00 and @y%1 == 0.00
case @move_speed
when 4..6
$fineness = 2.00 ** (@move_speed - 6)
else
$fineness = 0.25
end
end
# 移動中、イベント実行中、移動ルート強制中、
# メッセージウィンドウ表示中のいずれでもない場合
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# 方向ボタンが押されていれば、その方向へプレイヤーを移動
case Input.dir8
when 2
move_down(@direction_fix)
when 4
move_left(@direction_fix)
when 6
move_right(@direction_fix)
when 8
move_up(@direction_fix)
when 1
move_lower_left
when 3
move_lower_right
when 7
move_upper_left
when 9
move_upper_right
end
end
# ローカル変数に座標を記憶
last_real_x = @real_x
last_real_y = @real_y
super
# キャラクターが下に移動し、かつ画面上の位置が中央より下の場合
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
# マップを下にスクロール
$game_map.scroll_down(@real_y - last_real_y)
end
# キャラクターが左に移動し、かつ画面上の位置が中央より左の場合
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
# マップを左にスクロール
$game_map.scroll_left(last_real_x - @real_x)
end
# キャラクターが右に移動し、かつ画面上の位置が中央より右の場合
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
# マップを右にスクロール
$game_map.scroll_right(@real_x - last_real_x)
end
# キャラクターが上に移動し、かつ画面上の位置が中央より上の場合
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
# マップを上にスクロール
$game_map.scroll_up(last_real_y - @real_y)
end
# 移動中ではない場合
unless moving?
# 前回プレイヤーが移動中だった場合
if last_moving
# 同位置のイベントとの接触によるイベント起動判定
result = check_event_trigger_here([1,2])
# 起動したイベントがない場合
if result == false
# デバッグモードが ON かつ CTRL キーが押されている場合を除き
unless $DEBUG and Input.press?(Input::CTRL)
# エンカウント カウントダウン
if @encounter_count > 0
@encounter_count -= $fineness
end
end
end
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 同位置および正面のイベント起動判定
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end

Attention: les objet qui dans une direction ne bloque plus avec se script
Revenir en haut Aller en bas
antoine
Rang: Administrateur
antoine


Nombre de messages : 42
Date d'inscription : 16/02/2005

déplacement pixel par pixel et en diagonal Empty
MessageSujet: Re: déplacement pixel par pixel et en diagonal   déplacement pixel par pixel et en diagonal EmptySam 29 Oct à 17:47

j'ai essayé ton script et il ne fonctionne pas à cette ligne
mimiman a écrit:
@step_count_decimal += $fineness if stepped
il me dit qu'il y a une erreur de sintax quand je lance le jeu tas la solution?
merci
Revenir en haut Aller en bas
Contenu sponsorisé





déplacement pixel par pixel et en diagonal Empty
MessageSujet: Re: déplacement pixel par pixel et en diagonal   déplacement pixel par pixel et en diagonal Empty

Revenir en haut Aller en bas
 
déplacement pixel par pixel et en diagonal
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le monde des dragons :: RPG MAKING :: SCRIPT-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser