PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Map Vertikal und Horizontal scrollen???



Engel der Furcht
27.08.2007, 20:39
Hallo!
Ich wollte mal fragen,ob man beim RMXp die Maps "endlos" machen kann,wie beim RM2k(3),wenns per Ruby geht,wie geht das dann??:confused:


danke imm Vorraus

Mfg
EdF

Expresseon
27.08.2007, 21:24
Meinst du, dass sich die Map am Ende wieder wiederholt? Dazu gibts ein Skript:



#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ??????? - KGC_MapLoop?
#_/----------------------------------------------------------------------------
#_/ ????????????????????(?????)
#_/ Provides the function which is map loop of four directions.
#_/ (There are various problems.)
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ? ???????? - Customize ?
#==============================================================================

module KGC
# ????????????????????
# (false ????????????)
ML_EDGE_SHOW = true
end

#### ML_EDGE_SHOW
### Shows events of edge of map when looping.
# (The load probably decreases a little if this is false.)

#???????????????????????????????????????

$imported = {} if $imported == nil
$imported["MapLoop"] = true

#==============================================================================
# ¦ RPG::MapInfo
#==============================================================================

class RPG::MapInfo
#--------------------------------------------------------------------------
# ? ????
#--------------------------------------------------------------------------
def name
return @name.gsub(/\[.*\]/) {""}
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def original_name
return @name
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def horizontal_loop?
return @name =~ /\[L[ ]*([HV]+)\]/i && $1.upcase.scan(/./).include?("H")
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def vertical_loop?
return @name =~ /\[L[ ]*([HV]+)\]/i && $1.upcase.scan(/./).include?("V")
end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Game_Map
#==============================================================================

class Game_Map
#--------------------------------------------------------------------------
# ? ??????
# map_id : ??? ID
#--------------------------------------------------------------------------
alias setup_KGC_MapLoop setup
def setup(map_id)
@map_info = load_data("Data/MapInfos.rxdata")[map_id]
@bottom_over = false
@left_over = false
@right_over = false
@top_over = false
@last_x = @last_y = 0

@horizontal_loop = @map_info.horizontal_loop?
@vertical_loop = @map_info.vertical_loop?

setup_KGC_MapLoop(map_id)
end
#--------------------------------------------------------------------------
# ? ?????? (??????????????????)
#--------------------------------------------------------------------------
def valid?(x, y)
result = true
unless horizontal_loop?
result &= x >= 0 && x < self.width
end
unless vertical_loop?
result &= y >= 0 && y < self.height
end
return result
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
alias scroll_down_KGC_MapLoop scroll_down
def scroll_down(distance)
if $game_map.vertical_loop?
@display_y += distance
restore_display
else
scroll_down_KGC_MapLoop(distance)
end
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
alias scroll_left_KGC_MapLoop scroll_left
def scroll_left(distance)
if $game_map.horizontal_loop?
@display_x -= distance
restore_display
else
scroll_left_KGC_MapLoop(distance)
end
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
alias scroll_right_KGC_MapLoop scroll_right
def scroll_right(distance)
if $game_map.horizontal_loop?
@display_x += distance
restore_display
else
scroll_right_KGC_MapLoop(distance)
end
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
alias scroll_up_KGC_MapLoop scroll_up
def scroll_up(distance)
if $game_map.vertical_loop?
@display_y -= distance
restore_display
else
scroll_up_KGC_MapLoop(distance)
end
end
#--------------------------------------------------------------------------
# ? ??????? (private)
#--------------------------------------------------------------------------
def restore_display
# ????????????????????????
if @last_y > 0 && @display_y < 0
@bottom_over = true
elsif @last_y < 0 && @display_y > 0
@top_over = true
end
if @last_x > 0 && @display_x < 0
@right_over = true
elsif @last_x < 0 && @display_x > 0
@left_over = true
end
# ????????
@last_x = @display_x
@last_y = @display_y
end
private :restore_display
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias update_KGC_MapLoop update
def update
# ????????(?????)
if @bottom_over
@fog_oy += (self.height - 16) << 5
@bottom_over = false
elsif @top_over
@fog_oy -= (self.height - 16) << 5
@top_over = false
end
if @right_over
@fog_ox += (self.width - 16) << 5
@right_over = false
elsif @left_over
@fog_ox -= (self.width - 16) << 5
@left_over = false
end

update_KGC_MapLoop
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def horizontal_loop?
return @horizontal_loop
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def vertical_loop?
return @vertical_loop
end
#--------------------------------------------------------------------------
# ? ??????????????
# ??????????????:[X, Y]
#--------------------------------------------------------------------------
def pass_position_revise(x, y, d)
result = [x, y]
# ??????????
dx = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
dy = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
# ??????????????????????????
if horizontal_loop?
if dx < 0
result[0] += self.width
elsif dx >= self.width
result[0] -= self.width
end
end
if vertical_loop?
if dy < 0
result[1] += self.height
elsif dy >= self.height
result[1] -= self.height
end
end
# ??????
return result
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def horizontal_edge
if horizontal_loop?
if @display_x < 0
return -1
elsif @display_x > (self.width - 20) << 7
return 1
end
end
return 0
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def vertical_edge
if vertical_loop?
if @display_y < 0
return -1
elsif @display_y > (self.height - 15) << 7
return 1
end
end
return 0
end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Game_Character (???? 1)
#==============================================================================

class Game_Character
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def passable?(x, y, d)
# ????
dx, dy = $game_map.pass_position_revise(x, y, d)
# ?????????
new_x = dx + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = dy + (d == 2 ? 1 : d == 8 ? -1 : 0)
# ??????????
unless $game_map.valid?(new_x, new_y)
# ????
return false
end
# ???? ON ???
if @through
# ???
return true
end
# ?????????????????????
unless $game_map.passable?(x, y, d, self)
# ????
return false
end
# ????????????????????
unless $game_map.passable?(new_x, new_y, 10 - d)
# ????
return false
end
# ?????????
for event in $game_map.events.values
# ??????????????????
if event.x == new_x and event.y == new_y
# ???? OFF ??
unless event.through
# ??????????
if self != $game_player
# ????
return false
end
# ?????????????????????????????
if event.character_name != ""
# ????
return false
end
end
end
end
# ???????????????????
if $game_player.x == new_x and $game_player.y == new_y
# ???? OFF ??
unless $game_player.through
# ???????????????????
if @character_name != ""
# ????
return false
end
end
end
# ???
return true
end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Game_Character (???? 2)
#==============================================================================

class Game_Character
#--------------------------------------------------------------------------
# ? ?????? (??)
#--------------------------------------------------------------------------
alias update_move_KGC_MapLoop update_move
def update_move
update_move_KGC_MapLoop

# ????????
if $game_map.horizontal_loop? && @x << 7 == @real_x
if @x == -1
@x = $game_map.width - 1
@real_x = @x << 7
elsif @x == $game_map.width
@x = @real_x = 0
end
end
# ????????
if $game_map.vertical_loop? && @y << 7 == @real_y
if @y == -1
@y = $game_map.height - 1
@real_y = @y << 7
elsif @y == $game_map.height
@y = @real_y = 0
end
end
end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Spriteset_Map
#==============================================================================

class Spriteset_Map
if KGC::ML_EDGE_SHOW
#--------------------------------------------------------------------------
# ? ??
#--------------------------------------------------------------------------
alias dispose_KGC_MapLoop dispose
def dispose
if @character_sprites_h != nil
@character_sprites_h.each { |sprite| sprite.dispose }
end
if @character_sprites_v != nil
@character_sprites_v.each { |sprite| sprite.dispose }
end

dispose_KGC_MapLoop
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias update_KGC_MapLoop update
def update
update_KGC_MapLoop

# ??????????
if $game_map.horizontal_loop?
if @character_sprites_h == nil
@character_sprites_h = []
$game_map.events.keys.sort.each { |i|
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites_h << sprite
}
end
edge = $game_map.horizontal_edge
@character_sprites_h.each { |sprite|
sprite.update
if edge == -1
sprite.x -= $game_map.width << 5
elsif edge == 1
sprite.x += $game_map.width << 5
end
}
end
# ??????????
if $game_map.vertical_loop?
if @character_sprites_v == nil
@character_sprites_v = []
$game_map.events.keys.sort.each { |i|
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites_v << sprite
}
end
edge = $game_map.vertical_edge
@character_sprites_v.each { |sprite|
sprite.update
if edge == -1
sprite.y -= $game_map.height << 5
sprite.z -= $game_map.height << 5 if sprite.z < 999
elsif edge == 1
sprite.y += $game_map.height << 5
sprite.z += $game_map.height << 5 if sprite.z < 999
end
}
end
end
end
end

Ich hoffe es hilft dir weiter, musst es nur über dem Main einfügen. Außerdem muss eine Map, die geloopt werden soll, am Ende des Namens folgendes stehen haben:
vertikaler Loop: [LV]
horiz. Loop: [LH]
beides: [LHV]

Engel der Furcht
27.08.2007, 21:36
cool!
Ich habe nochmal ne frage zum Scrolling,kann man abstellen,dass sich das Panorama-Bild scrollt,weil ich im moment an einer Worldmap mit "Mode 07" erstelle^^

Engel der Furcht
29.08.2007, 09:53
weiss das denn niemand?
Bitte!!T.T