[Résolu] - Recadrage de l'ecran sur le héros (rmxp)

Démarré par Linkeur, 01 Février 2009 à 19:14

0 Membres et 1 Invité sur ce sujet

01 Février 2009 à 19:14 Dernière édition: 13 Mars 2009 à 18:07 par yoshi04
Bonjour,
J'utilise ce script pour modifier la taille de la fenetre de mon jeu :


Largeur = 800
Hauteur = 600
#===================================
title = "\0" * 256
Win32API.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l').call("Game", "Title", "", title, 256, ".//Game.ini")
title.delete!("\0")
window_now = Win32API.new('user32', 'FindWindow', "p, p", 'i').call("RGSS Player", title)
window_next = Win32API.new('user32', 'SetWindowPos', "l, l, i, i, i, i, i", 'i').call(window_now, -1, 1024 - Largeur / 2, 384 - Hauteur / 2, Largeur, Hauteur, 0)


Aussi l'écran ne suit plus le héros ( je n'ai plus le terme exact )si quelqu'un a une idée.
Merci pour vos futures réponses
On ne combat que pour ce que l'on aime ; on n'aime que ce qu'on estime ; et pour estimer, il faut au moins connaïtre. Or l'humanitée n'est qu'ignorance. Mais est-ce une raison pour ne pas combattre afin de faire persister ses propres ideaux ?

Tu as ajouté un nouveau script ou modifié un existant ?
C'est la totalité du script ça ?


    







Je crois que le problème est que l'écran se fixe à la position de départ du héros et non à la position du héros en tant que telle.

Ecusez moi pour la lenteur de mes réponses mais je n'ai pas accés a internet tout les jours. :(
Oui ceci est la totalité du script et comme l'a dit Maxime, mon probléme est bien que l'écran ne suit pas le héros lorsque je me déplace.
Si quelqu'un a une idée, je suis preneur car ce scrypt m'interesse au plus haut point.
Merci pour vos futures réponses  :)
On ne combat que pour ce que l'on aime ; on n'aime que ce qu'on estime ; et pour estimer, il faut au moins connaïtre. Or l'humanitée n'est qu'ignorance. Mais est-ce une raison pour ne pas combattre afin de faire persister ses propres ideaux ?

Ok pour la totalité ;).

Le script est assez compliqué à traduire, surtout que je n'y connais rien quand on se sert de Win32...
Mais il y  quelque chose déjà qui me parait être une erreur :

Largeur = 800
Hauteur = 600

Sois ce sont des commentaires, et dans ce cas il faut un '#' devant, soit ce sont des variables ( moins plausible à mon avis ) et il manque un '$' devant ;).

Citation de: Daru13Tu as ajouté un nouveau script ou modifié un existant ?
...?

    







J'ai trouvé ce script betement sur internet, je crois que son createur s'appel corbaque ou quelque chose dans le genre.
De plus je suis vraiment une bille en matiére de ruby, c'est pour ça que je m'en remet à vous. ^^
De plus je ne pense pas que ce soit des commentaires car quand on modifie les valeurs, cela a un réél impact sur la fenetre.
Voila tout ce que je sais, le mieux est que vous testiez pour vous en rendre compte par vous même.
Merci pour vos futures réponses
On ne combat que pour ce que l'on aime ; on n'aime que ce qu'on estime ; et pour estimer, il faut au moins connaïtre. Or l'humanitée n'est qu'ignorance. Mais est-ce une raison pour ne pas combattre afin de faire persister ses propres ideaux ?

Oui mais tu m'a toujours pas dit : tu as ajouté ce script, modifié une existant, voir supprimé un ou des existants ? Tu as lu ce qu'il fallait modifier/faire pour que ça marche avant de l'insérer, si il y avait des notes ?

Si c'est de Corbaque, tu peux lui demander sur RMXP factory, il y est inscrit, un pt'it MP / Topic et c'est dans la poche ;).

    







06 Février 2009 à 19:06 #7 Dernière édition: 06 Février 2009 à 19:34 par Linkeur
Il n'y avait aucune note, juste le script avec son effet, et non je n'ai rien touché
Mais je ne pense pas que la fonction soit directement intégrer au script, je vais suivre ton conseil et m'adresser directement a corbaque.
Je vous tiens au courant dés que j'ai la solution.
Merci de vos réponses =)

PS : j'ai trouvé un autre script fonctionnel cette fois, pour ceux que ça intéresse ^^.
A placé juste au dessus de main, c'est un script de camille a partir d'un script de squall :

[spoiler]#==============================================================================
# ■ Win32API
#------------------------------------------------------------------------------
# camille laffont_10@hotmail.com


class Win32API
#--------------------------------------------------------------------------
# ● define constant
#--------------------------------------------------------------------------
GAME_INI_FILE = ".\\Game.ini"         # defini "Game.ini" fichier
HWND_TOPMOST = 0                      # fenetre tjs active
HWND_TOP = -1                         # fentre active que can elle est utiliser
SWP_NOMOVE   = 0                      # les position et la taille de la fenetre peugve etre modifier
#--------------------------------------------------------------------------
# ● Win32API.GetPrivateProfileString // check your game title in Game.ini
#--------------------------------------------------------------------------
def Win32API.GetPrivateProfileString(section, key)
   val = "\0"*256
   gps = Win32API.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l')
   gps.call(section, key, "", val, 256, GAME_INI_FILE)
   val.delete!("\0")
   return val
end
#--------------------------------------------------------------------------
# ● Win32API.FindWindow // cherche la fenetre RGSS
#--------------------------------------------------------------------------
def Win32API.FindWindow(class_name, title)
   fw = Win32API.new('user32', 'FindWindow', %(p, p), 'i')
   hWnd = fw.call(class_name, title)
   return hWnd
end
#--------------------------------------------------------------------------
# ● Win32API.SetWindowPos // change la position et la taille de la fenetre
#--------------------------------------------------------------------------
def Win32API.SetWindowPos(w, h)
   title =  Win32API.GetPrivateProfileString("Game", "Title")
   hWnd = Win32API.FindWindow("RGSS Player", title)
   swp = Win32API.new('user32', 'SetWindowPos', %(l, l, i, i, i, i, i), 'i')
   win = swp.call(hWnd, HWND_TOP, 0, 0, w + 6, h + 32, 0)
   
   #la ligne si dessous correspond à la fenetre supérieur aux autres
   #win = swp.call(hWnd, HWND_TOPMOST, 0, 0, w + 6, h + 32, SWP_NOMOVE)
   return win
end
#--------------------------------------------------------------------------
# ● Win32API.client_size // check the window width and height
#--------------------------------------------------------------------------
def Win32API.client_size
   title =  Win32API.GetPrivateProfileString("Game", "Title")
   hWnd = Win32API.FindWindow("RGSS Player", title)
   rect = [0, 0, 0, 0].pack('l4')
   Win32API.new('user32', 'GetClientRect', %w(l p), 'i').call(hWnd, rect)
   width, height = rect.unpack('l4')[2..3]
   return width, height
end
end

#==============================================================================
# ■ proceed with creation of the window
#------------------------------------------------------------------------------
# the width and height variables set the screen size.
#==============================================================================
$width = 340
$height = 280
win = Win32API.SetWindowPos($width, $height)
if(win == 0)
   p "Size change has failed!"
end

#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
#  remade to be compatible with change sreen size scrîpt
#==============================================================================

class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● define constant
#--------------------------------------------------------------------------
CENTER_X = ($width/2 - 16) * 4    # X coordinate in the center of the screen
CENTER_Y = ($height/2 - 16) * 4   # Y coordinate in the center of the screen
end

#==============================================================================
# ■ Spriteset_Map //squall@loeher.zzn.com
#------------------------------------------------------------------------------
# remade to be compatible with change sreen size scrîpt
#==============================================================================

class Spriteset_Map
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize
if $game_map.width >= 25 and $game_map.height >= 19
   $width2 = $width
   $height2 = $height
elsif $game_map.width >= 25 and $game_map.height < 19
   $width2 = $width
   $height2 = 480
elsif $game_map.width < 25 and $game_map.height >= 19
   $width2 = 640
   $height2 = $height
elsif $game_map.width < 25 and $game_map.height < 19
   $width2 = 640
   $height2 = 480
else
   $width2 = $width
   $height2 = $height
end
  @viewport1 = Viewport.new(0, 0, $width2, $height2)
  @viewport2 = Viewport.new(0, 0, $width2, $height2)
  @viewport3 = Viewport.new(0, 0, $width2, $height2)
  @viewport4 = Viewport.new(640, 0, $width2-640, 480)
  @viewport5 = Viewport.new(0, 480, 640, $height2-480)
  @viewport6 = Viewport.new(640, 480, $width2-640, $height2-480)

  #@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 200
@viewport3.z = 5000

@tilemap = Tilemap.new(@viewport1)
@tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
for i in 0..6
  autotile_name = $game_map.autotile_names
  @tilemap.autotiles = RPG::Cache.autotile(autotile_name)
end
@tilemap.map_data = $game_map.data
@tilemap.priorities = $game_map.priorities

@panorama = Plane.new(@viewport1)
@panorama.z = -1000

@fog = Plane.new(@viewport1)
@fog.z = 3000

@character_sprites = []
for i in $game_map.events.keys.sort
  sprite = Sprite_Character.new(@viewport2, $game_map.events)
  @character_sprites.push(sprite)
end
@character_sprites.push(Sprite_Character.new(@viewport2, $game_player))

@weather = RPG::Weather.new(@viewport1)

@picture_sprites = []
for i in 1..50
  @picture_sprites.push(Sprite_Picture.new(@viewport2, $game_screen.pictures))
end

@timer_sprite = Sprite_Timer.new

@tilemap2 = Tilemap.new(@viewport4)
@tilemap2.tileset = RPG::Cache.tileset($game_map.tileset_name)
@tilemap3 = Tilemap.new(@viewport5)
@tilemap3.tileset = RPG::Cache.tileset($game_map.tileset_name)
@tilemap4 = Tilemap.new(@viewport6)
@tilemap4.tileset = RPG::Cache.tileset($game_map.tileset_name)

for i in 0..6
  autotile_name = $game_map.autotile_names
  @tilemap2.autotiles = RPG::Cache.autotile(autotile_name)
  @tilemap3.autotiles = RPG::Cache.autotile(autotile_name)
  @tilemap4.autotiles = RPG::Cache.autotile(autotile_name)
end

@tilemap2.map_data = $game_map.data
@tilemap3.map_data = $game_map.data
@tilemap4.map_data = $game_map.data

update
end
#--------------------------------------------------------------------------
# ● Dispose the sprite
#--------------------------------------------------------------------------
def dispose

@tilemap.tileset.dispose
@tilemap2.tileset.dispose
@tilemap3.tileset.dispose
@tilemap4.tileset.dispose

for i in 0..6
  @tilemap.autotiles.dispose
  @tilemap2.autotiles.dispose
  @tilemap3.autotiles.dispose
  @tilemap4.autotiles.dispose
end

@tilemap.dispose
@tilemap2.dispose
@tilemap3.dispose
@tilemap4.dispose

@panorama.dispose
@fog.dispose

for sprite in @character_sprites
   sprite.dispose
end

@weather.dispose

for sprite in @picture_sprites
  sprite.dispose
end

@timer_sprite.dispose
@viewport1.dispose
@viewport2.dispose
@viewport3.dispose

@viewport4.dispose
@viewport5.dispose
@viewport6.dispose
end
#--------------------------------------------------------------------------
# ● Update the sprite
#--------------------------------------------------------------------------
def update

if @panorama_name != $game_map.panorama_name or
   @panorama_hue != $game_map.panorama_hue
  @panorama_name = $game_map.panorama_name
  @panorama_hue = $game_map.panorama_hue
  if @panorama.bitmap != nil
    @panorama.bitmap.dispose
    @panorama.bitmap = nil
  end
  if @panorama_name != ""
    @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  end
  Graphics.frame_reset
end

if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  @fog_name = $game_map.fog_name
  @fog_hue = $game_map.fog_hue
  if @fog.bitmap != nil
    @fog.bitmap.dispose
    @fog.bitmap = nil
  end
  if @fog_name != ""
    @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  end
  Graphics.frame_reset
end

@tilemap.ox = $game_map.display_x / 4
@tilemap.oy = $game_map.display_y / 4
@tilemap.update

#if @tilemap.ox > $game_map.width * 32 - $width
  #@tilemap.ox = $game_map.width * 32 - $width
#end
#if @tilemap.oy > $game_map.width * 32 - $height
  #@tilemap.oy = $game_map.height * 32 - $height
#end

@tilemap2.ox = @tilemap.ox + 640
@tilemap2.oy = @tilemap.oy
@tilemap2.update

@tilemap3.ox = @tilemap.ox
@tilemap3.oy = @tilemap.oy + 480
@tilemap3.update

@tilemap4.ox = @tilemap.ox + 640
@tilemap4.oy = @tilemap.oy + 480
@tilemap4.update

@panorama.ox = $game_map.display_x / 8
@panorama.oy = $game_map.display_y / 8

@fog.zoom_x = $game_map.fog_zoom / 100.0
@fog.zoom_y = $game_map.fog_zoom / 100.0
@fog.opacity = $game_map.fog_opacity
@fog.blend_type = $game_map.fog_blend_type
@fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
@fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
@fog.tone = $game_map.fog_tone

for sprite in @character_sprites
  sprite.update
end

@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.ox = $game_map.display_x / 4
@weather.oy = $game_map.display_y / 4
@weather.update

for sprite in @picture_sprites
  sprite.update
end

@timer_sprite.update

@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
@viewport3.color = $game_screen.flash_color
@viewport1.update
@viewport3.update
end
end
class Game_Map
#--------------------------------------------------------------------------
# ● Scroll the map down
#     distance : Distance to scroll in real units (4 = 1 pixel).
#--------------------------------------------------------------------------
def scroll_down(distance)
if $height / 32.0 < self.height - 1
  @display_y = [@display_y + distance, (self.height - ($height / 32.0)) * 128].min
else
  @display_y = [@display_y + distance, (self.height - 15) * 128].min
end
end
#--------------------------------------------------------------------------
# ● Scroll the map left
#     distance : Distance to scroll in real units (4 = 1 pixel).
#--------------------------------------------------------------------------
def scroll_left(distance)
@display_x = [@display_x - distance, 0].max
end
#--------------------------------------------------------------------------
# ● Scroll the map right
#     distance : Distance to scroll in real units (4 = 1 pixel).
#--------------------------------------------------------------------------
def scroll_right(distance)
if $width / 32.0 < self.width - 1
  @display_x = [@display_x + distance, (self.width - ($width / 32.0)) * 128].min
else
  @display_x = [@display_x + distance, (self.width - 20) * 128].min
end
end
#--------------------------------------------------------------------------
# ● Scroll the map up
#     distance : Distance to scroll in real units (4 = 1 pixel).
#--------------------------------------------------------------------------
def scroll_up(distance)
@display_y = [@display_y - distance, 0].max
end
end[/spoiler]
On ne combat que pour ce que l'on aime ; on n'aime que ce qu'on estime ; et pour estimer, il faut au moins connaïtre. Or l'humanitée n'est qu'ignorance. Mais est-ce une raison pour ne pas combattre afin de faire persister ses propres ideaux ?