设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2520|回复: 9
打印 上一主题 下一主题

[已经解决] RPG XP怎么更改分辨率?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2015-7-6
帖子
6
跳转到指定楼层
1
发表于 2015-7-6 11:44:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
拜托各位大神帮帮忙!把游戏窗口改小些。。。。。比如300X225。
帮帮我吧,我画精灵画大了觉得丑,所以画成100X100,或者50X50再或者75X75比较好看....
救助大神,我是脚本小白,只懂得 p XXXX ,帮帮我吧!
急用!Thank the help me  every one![/code]
不管分辨率多大,只要不超过400X300就行了!
拜托!拜托! {:4_123:}


求求你们啦~可怜可怜我吧~~
6

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2015-7-6
帖子
6
2
 楼主| 发表于 2015-7-6 11:45:35 | 只看该作者
快来人啦~~~~~~~~
6
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
3
发表于 2015-7-6 12:12:18 | 只看该作者
现在还没有完美的分辨率更改方法
这是在下的帖子
https://rpg.blue/forum.php?mod=viewthread&tid=362553
仅供参考
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

4
发表于 2015-7-6 12:16:59 | 只看该作者
Graphics.resize_screen(width, height)

  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2015-7-6
帖子
6
5
 楼主| 发表于 2015-7-6 13:17:28 | 只看该作者
本帖最后由 ScoreEdition 于 2015-7-6 13:25 编辑
紫英晓狼1130 发表于 2015-7-6 12:12
现在还没有完美的分辨率更改方法
这是在下的帖子
https://rpg.blue/forum.php?mod=viewthread&tid=36255 ...


我自己调了一下,怎么这出错了?




回复“kuerlulu”:不懂用啊。。。

360反馈意见截图16350913111112117.png (67.94 KB, 下载次数: 18)

360反馈意见截图16350913111112117.png
6
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2015-7-6
帖子
6
6
 楼主| 发表于 2015-7-6 13:31:17 | 只看该作者
紫英晓狼1130 发表于 2015-7-6 12:12
现在还没有完美的分辨率更改方法
这是在下的帖子
https://rpg.blue/forum.php?mod=viewthread&tid=36255 ...

我改成了这样:
★Game_Resolution


#==============================================================================
# ■ 真·RMXP分辨率拓展 By 紫英晓狼工作室
#------------------------------------------------------------------------------
#  用于更改游戏分辨率,紫英晓狼工作室修改
#   脚本主要来源于癫狂侠客的DKRM,自己稍作修改
#   全局搜索“修改”可以看到修改的地方
#   所有的窗口类没有改动,使用前请注意
#   使用需复制带★的脚本,以及START.dll
#==============================================================================

module GAME_WINDOW
  INT_WIDTH = 300              # 窗口宽度
  INT_HEIGHT = 225             # 窗口高度
end
  ini=".\\Game.ini"
  val = "\0"*256
  gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')
  gps.call("Game", "Title", "", val, 256, ini)
  val.delete!("\0")
  title = val
  fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')
  hWnd = fw.call("RGSS Player", title)
  swp = Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')
  pointwds = [0,0,0,0].pack('llll')
  pointcet = [0, 0].pack('ll')
  wdsrect = Win32API.new('user32.dll', 'GetWindowRect', 'lp', 'l')
  client_screen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')
  wdsrect.call(hWnd,pointwds)
  client_screen.call(hWnd, pointcet)
  wds = pointwds.unpack('llll')
  cet = pointcet.unpack('ll')
  addw =  wds[2] - wds[0] - 640
  addh =  wds[3] - wds[1] - 480
  x = wds[0] - (GAME_WINDOW::INT_WIDTH - 640) / 2
  y = wds[1] - (GAME_WINDOW::INT_HEIGHT - 480) / 2
  swp.call(hWnd, 0, x, y, GAME_WINDOW::INT_WIDTH + addw, GAME_WINDOW::INT_HEIGHT+addh,0x20)
#============================================================================
# ■ Plane
#============================================================================

class Plane
  #--------------------------------------------------------------------------
  # ● 初始化定义
  #--------------------------------------------------------------------------
  def initialize(v = Viewport.new(0, 0, 640, 480))
    @x           = 0
    @y           = 0
    @z           = 0
    @ox          = 0
    @oy          = 0
    @ox2         = 0
    @oy2         = 0
    @rect        = v.rect
    @zoom_x      = 1.0
    @zoom_y      = 1.0
    @bitmap      = nil
    @contents    = Sprite.new
    @n_w         = 1
    @n_h         = 1
    @visible     = true
    @tone        = Tone.new(0, 0, 0, 0)
    @color       = Color.new(255,255,255,0)
    @blend_type  = 0
    @opacity     = 255
    @dispose     = false
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def update
    @contents.x = @x
    @contents.y = @y
    @contents.ox = @ox2
    @contents.oy = @oy2
    @contents.opacity = @opacity
    @contents.visible = @visible
    @contents.tone = @tone
    @contents.blend_type = @blend_type
    @contents.z = @z
  end
  #--------------------------------------------------------------------------
  # ● 装载图形(bitmap)
  #--------------------------------------------------------------------------
  def bitmap=(bitmap)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @bitmap = bitmap
      count_wh
      update
    end
  end
  #--------------------------------------------------------------------------
  # ● 图形
  #--------------------------------------------------------------------------
  def bitmap
    return if @bitmap != nil
  end
  #--------------------------------------------------------------------------
  # ● X 坐标(x)
  #--------------------------------------------------------------------------
  def x=(x)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @x = x
      update
    end
  end
  def x
    return @x
  end
  #--------------------------------------------------------------------------
  # ● Y 坐标(y)
  #--------------------------------------------------------------------------
  def y=(y)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @y = y
      update
    end
  end
  def y
    return @y
  end
  #--------------------------------------------------------------------------
  # ● Z 坐标(z)
  #--------------------------------------------------------------------------
  def z=(z)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @z = z
      update
    end
  end
  def z
    return @z
  end
  #--------------------------------------------------------------------------
  # ● X 漂移量(ox)
  #--------------------------------------------------------------------------
  def ox=(ox)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @bitmap != nil
        @ox = ox
        @ox2 = ox % (@bitmap.width * @zoom_x).to_i
        update
      end
    end
  end
  def ox
    return @ox
  end
  #--------------------------------------------------------------------------
  # ● Y 漂移量(oy)
  #--------------------------------------------------------------------------
  def oy=(oy)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @bitmap != nil
        @oy = oy
        @oy2 = oy % (@bitmap.height * @zoom_y).to_i
        update
      end
    end
  end
  def oy
    return @oy
  end
  #--------------------------------------------------------------------------
  # ● X 方向缩放(zoom_x)
  #--------------------------------------------------------------------------
  def zoom_x=(zx)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @zoom_x != zx
        @zoom_x = zx
        count_wh
      end
      update
    end
  end
  def zoom_x
    return @zoom_x
  end
  #--------------------------------------------------------------------------
  # ● Y 方向缩放(zoom_y)
  #--------------------------------------------------------------------------
  def zoom_y=(zy)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @zoom_y != zy
        @zoom_y = zy
        count_wh
      end
      update
    end
  end
  def zoom_y
    return @zoom_y
  end
  #--------------------------------------------------------------------------
  # ● 不透明度(opacity)
  #--------------------------------------------------------------------------
  def opacity=(op)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @opacity = op
      update
    end
  end
  def opacity
    return @opacity
  end
  #--------------------------------------------------------------------------
  # ● 颜色叠加(color)
  #--------------------------------------------------------------------------
  def color=(c)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @color = c
      update
    end
  end
  def color
    return @color
  end
  #--------------------------------------------------------------------------
  # ● 色调(tone)
  #--------------------------------------------------------------------------
  def tone=(tone)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @tone = tone
      update
    end
  end
  def tone
    return @tone
  end
  #--------------------------------------------------------------------------
  # ● 是否可见(visible)
  #--------------------------------------------------------------------------
  def visible=(v)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @visible = v
      update
    end
  end
  def visible
    return @visible
  end
  #--------------------------------------------------------------------------
  # ● 叠加模式(blend_type)
  #--------------------------------------------------------------------------
  def blend_type=(bt)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @blend_type = bt
      update
    end
  end
  def blend_type
    return @blend_type
  end
  #--------------------------------------------------------------------------
  # ● 释放内存(dispose)
  #--------------------------------------------------------------------------
  def dispose
    return if @dispose
    @dispose = true
    @contents.bitmap.dispose if @contents.bitmap != nil
    @contents.bitmap = nil
    @contents.dispose if @contents != nil
    @contents = nil
    @bitmap.dispose if @bitmap != nil
    @bitmap = nil
  end
  #--------------------------------------------------------------------------
  # ● 检测释放(dispose?)
  #--------------------------------------------------------------------------
  def dispose?
    @dispose
  end
  #--------------------------------------------------------------------------
  # ● 计算Plane的长宽与精灵排布(count_wh)
  #--------------------------------------------------------------------------
  def count_wh
    if @bitmap != nil
      @n_w = @rect.width / (@bitmap.width * @zoom_x).to_i + 3
      @n_h = @rect.height / (@bitmap.height * @zoom_y).to_i + 3
      h = @n_h * (@bitmap.height * @zoom_y).to_i
      w = @n_w * (@bitmap.width * @zoom_x).to_i
      if @contents.bitmap == nil
        @contents.bitmap = Bitmap.new(w, h)
      end
      @contents.bitmap.clear
      for x in 0..@n_w
        for y in 0..@n_h
          rect = Rect.new(0,0,@bitmap.width,@bitmap.height)
          dest_rect = Rect.new(x * @bitmap.width * @zoom_x,\
          y * @bitmap.height * @zoom_y,@bitmap.width * @zoom_x,\
          @bitmap.height * @zoom_y)
          @contents.bitmap.stretch_blt(dest_rect, @bitmap, rect)
        end
      end
    end
  end
end
#===================================================
# ■ Tilemap
#===================================================

class CustomTilemapAutotiles
  attr_accessor :changed
  def initialize
    @changed=true
    @tiles=[nil,nil,nil,nil,nil,nil,nil]
  end
  def []=(i,value)
    @tiles=value
    @changed=true
  end
  def [](i)
    return @tiles
  end
end

class Tilemap
  Animated_Autotiles_Frames = 15
  Autotiles = [
    [ [27, 28, 33, 34], [ 5, 28, 33, 34], [27, 6, 33, 34], [ 5, 6, 33, 34],
      [27, 28, 33, 12], [ 5, 28, 33, 12], [27, 6, 33, 12], [ 5, 6, 33, 12] ],
    [ [27, 28, 11, 34], [ 5, 28, 11, 34], [27, 6, 11, 34], [ 5, 6, 11, 34],
      [27, 28, 11, 12], [ 5, 28, 11, 12], [27, 6, 11, 12], [ 5, 6, 11, 12] ],
    [ [25, 26, 31, 32], [25, 6, 31, 32], [25, 26, 31, 12], [25, 6, 31, 12],
      [15, 16, 21, 22], [15, 16, 21, 12], [15, 16, 11, 22], [15, 16, 11, 12] ],
    [ [29, 30, 35, 36], [29, 30, 11, 36], [ 5, 30, 35, 36], [ 5, 30, 11, 36],
      [39, 40, 45, 46], [ 5, 40, 45, 46], [39, 6, 45, 46], [ 5, 6, 45, 46] ],
    [ [25, 30, 31, 36], [15, 16, 45, 46], [13, 14, 19, 20], [13, 14, 19, 12],
      [17, 18, 23, 24], [17, 18, 11, 24], [41, 42, 47, 48], [ 5, 42, 47, 48] ],
    [ [37, 38, 43, 44], [37, 6, 43, 44], [13, 18, 19, 24], [13, 14, 43, 44],
      [37, 42, 43, 48], [17, 18, 47, 48], [13, 18, 43, 48], [ 1, 2, 7, 8] ]
     ]
  FlashOpacity=[100,90,80,70,80,90]
  attr_reader :tileset
  attr_reader :autotiles
  attr_reader :map_data
  attr_accessor :flash_data
  attr_accessor :priorities
  attr_reader :visible
  attr_accessor :ox
  attr_accessor :oy
  attr_reader :viewport
  def initialize(viewport=Viewport.new(0,0,640,480))
    @tileset  = nil # Refers to Map Tileset Name
    @autotiles = CustomTilemapAutotiles.new
    @map_data  = nil # Refers to 3D Array Of Tile Settings
    @flash_data = nil # Refers to 3D Array of Tile Flashdata
    @priorities = nil # Refers to Tileset Priorities
    @visible  = true # Refers to Tileset Visibleness
    @ox      = 0  # Bitmap Offsets
    @oy      = 0  # bitmap Offsets
    @plane    = false
    @viewport=viewport
    @tiles=[]
    @autotileInfo=[]
    @regularTileInfo=[]
    @oldOx=0
    @oldOy=0
    @layer0=Sprite.new(viewport)
    @layer0.visible=true
    @nowshown=false
    @layer0.bitmap=Bitmap.new(@viewport.rect.width*2,@viewport.rect.height*2)
    @flash=nil
    @layer0.ox=0
    @layer0.oy=0
    @oxLayer0=0
    @oyLayer0=0
    @oxFlash=0
    @oyFlash=0
    @layer0.z=0
    @priotiles=[]
    @prioautotiles=[]
    @autosprites=[]
    @framecount=[]
    @tilesetChanged=true
    @flashChanged=false
    @firsttime=true
    @disposed=false
    @usedsprites=false
    @layer0clip=true
    @firsttimeflash=true
    @fullyrefreshed=false
    @fullyrefreshedautos=false
  end
  def disposed?
    return @disposed
  end
  def flash_data=(value)
    @flash_data=value
    @flashChanged=true  
  end
  def update
    if @autotiles.changed
      refresh_autotiles
      repaintAutotiles
    end
    if @flashChanged
      refresh_flash
    end
    if @tilesetChanged
      refresh_tileset
    end
    if @flash
      @flash.opacity=FlashOpacity[(Graphics.frame_count/2) % 6]
    end
    if !(@oldOx==@ox&&@oldOy==@oy&&
          !@tilesetChanged&&
          [email protected])
      refresh
    end
    if (Graphics.frame_count % Animated_Autotiles_Frames == 0) || @nowshown
      repaintAutotiles
      refresh(true)
    end
    @nowshown=false
    @autotiles.changed=false
    @tilesetChanged=false
  end
  def priorities=(value)
    @priorities=value
    @tilesetChanged=true
  end
  def tileset=(value)
    @tileset=value
    @tilesetChanged=true
  end
def shown?
  return false if !@visible
  ysize=@map_data.ysize
  xsize=@map_data.xsize
  xStart=(@ox/32)-1
  xEnd=((@[email protected])/32)+1
  yStart=(@oy/32)-1
  yEnd=((@[email protected])/32)+1
  xStart=0 if xStart<0
  xStart=xsize-1 if xStart>=xsize
  xEnd=0 if xEnd<0
  xEnd=xsize-1 if xEnd>=xsize
  yStart=0 if yStart<0
  yStart=ysize-1 if yStart>=ysize
  yEnd=0 if yEnd<0
  yEnd=ysize-1 if yEnd>=ysize
  return (xStart<xEnd&&yStart<yEnd)
end
def dispose
return if disposed?
@help.dispose if @help
@help=nil
i=0;[email protected];while i<len
if @autotileInfo
    @autotileInfo.dispose
    @autotileInfo=nil
end
i+=1
end
i=0;[email protected];while i<len
if @regularTileInfo
    @regularTileInfo.dispose
    @regularTileInfo=nil
end
i+=1
end
i=0;[email protected];while i<len
@tiles.dispose
@tiles=nil
i+=2
end
i=0;[email protected];while i<len
@autosprites.dispose
@autosprites=nil
i+=2
end
if @layer0
@layer0.bitmap.dispose if [email protected]?
@layer0.bitmap=nil if [email protected]?
@layer0.dispose
@layer0=nil
end
if @flash
@flash.bitmap.dispose if [email protected]?
@flash.bitmap=nil if [email protected]?
@flash.dispose
@flash=nil
end
for i in 0...7
self.autotiles=nil
end
@tiles.clear
@autosprites.clear
@autotileInfo.clear
@regularTileInfo.clear
@tilemap=nil
@tileset=nil
@priorities=nil
@disposed=true
end
def bltAutotile(bitmap,x,y,id,frame)
return if frame<0
autotile=@autotiles[id/48-1]
return if !autotile
if autotile.height==32
  anim=frame*32
  src_rect=Rect.new(anim,0,32,32)
  bitmap.blt(x,y,autotile,src_rect)
else
  anim=frame*96
  id%=48
  tiles = Autotiles[id>>3][id&7]
  src=Rect.new(0,0,0,0)
  for i in 0...4
    tile_position = tiles - 1
    src.set(tile_position % 6 * 16 + anim,
    tile_position / 6 * 16, 16, 16)
    bitmap.blt(i%2*16+x,i/2*16+y, autotile, src)
  end
end
end
def autotileNumFrames(id)
autotile=@autotiles[id/48-1]
return 0 if !autotile || autotile.disposed?
frames=1
if autotile.height==32
  frames=autotile.width/32
else
  frames=autotile.width/96
end
return frames
end
def autotileFrame(id)
autotile=@autotiles[id/48-1]
return -1 if !autotile || autotile.disposed?
frames=1
if autotile.height==32
  frames=autotile.width/32
else
  frames=autotile.width/96
end
return (Graphics.frame_count/Animated_Autotiles_Frames)%frames
end
def repaintAutotiles
for i in [email protected]
next if !@autotileInfo
frame=autotileFrame(i)
bltAutotile(@autotileInfo,0,0,i,frame)
end
end
def getAutotile(sprite,id)
anim=autotileFrame(id)
return if anim<0
bitmap=@autotileInfo[id]
if !bitmap
  bitmap=Bitmap.new(32,32)
  bltAutotile(bitmap,0,0,id,anim)
  @autotileInfo[id]=bitmap
end
sprite.bitmap=bitmap if !sprite.equal?(bitmap) || sprite.bitmap!=bitmap
end
def getRegularTile(sprite,id)
if false
sprite.bitmap=@tileset if !sprite.equal?(@tileset) || sprite.bitmap!=@tileset
sprite.src_rect.set((id - 384) % 8 * 32, (id - 384) / 8 * 32,32,32)
else
bitmap=@regularTileInfo[id]
if !bitmap
  bitmap=Bitmap.new(32,32)
  rect=Rect.new((id - 384) % 8 * 32, (id - 384) / 8 * 32,32,32)
  bitmap.blt(0,0,@tileset,rect)
  @regularTileInfo[id]=bitmap
end
sprite.bitmap=bitmap if !sprite.equal?(bitmap) || sprite.bitmap!=bitmap
end
end
def addTile(tiles,count,xpos,ypos,id)
  if id>=384
    if count>=tiles.length
    sprite=Sprite.new(@viewport)
    tiles.push(sprite,0)
    else
    sprite=tiles[count]
    tiles[count+1]=0
    end
    sprite.visible=@visible
    sprite.x=xpos
    sprite.y=ypos
    getRegularTile(sprite,id)
    spriteZ=(@priorities[id]==0||!@priorities[id]) ? 0 : ypos+@priorities[id]*32+32
    sprite.z=spriteZ
    count+=2
  else
    if count>=tiles.length
    sprite=Sprite.new(@viewport)
    tiles.push(sprite,1)
    else
    sprite=tiles[count]
    tiles[count+1]=1
    end
    sprite.visible=@visible
    sprite.x=xpos
    sprite.y=ypos
    getAutotile(sprite,id)
    spriteZ=(@priorities[id]==0||!@priorities[id]) ? 0 : ypos+@priorities[id]*32+32
    sprite.z=spriteZ
    count+=2
  end
  return count
end
def refresh_tileset
i=0;[email protected];while i<len
if @regularTileInfo
    @regularTileInfo.dispose
    @regularTileInfo=nil
end
i+=1
end
@regularTileInfo.clear
@priotiles.clear
ysize=@map_data.ysize
xsize=@map_data.xsize
zsize=@map_data.zsize
if xsize>100 || ysize>100
@fullyrefreshed=false
else
for z in 0...zsize
  for y in 0...ysize
  for x in 0...xsize
    id = @map_data[x, y, z]
    next if id==0 || !@priorities[id]
    next if @priorities[id]==0
    @priotiles.push([x,y,z,id])
  end
  end
end
@fullyrefreshed=true
end
end
def refresh_flash
if @flash_data&&!@flash
@flash=Sprite.new(viewport)
@flash.visible=true
@flash.z=1
@flash.blend_type=1
@flash.bitmap=Bitmap.new(@viewport.rect.width*2,@viewport.rect.height*2)
@firsttimeflash=true
elsif !@flash_data&&@flash
@flash.bitmap.dispose if @flash.bitmap
@flash.dispose
@flash=nil
@firsttimeflash=false
end
end
def refresh_autotiles
i=0;[email protected];while i<len
if @autotileInfo
    @autotileInfo.dispose
    @autotileInfo=nil
end
i+=1
end
i=0;[email protected];while i<len
if @autosprites
    @autosprites.dispose
    @autosprites=nil
end
i+=2
end
@autosprites.clear
@autotileInfo.clear
@prioautotiles.clear
hasanimated=false
for i in 0...7
numframes=autotileNumFrames(48*(i+1))
hasanimated=true if numframes>=2
@framecount=numframes
end
if hasanimated
ysize=@map_data.ysize
xsize=@map_data.xsize
zsize=@map_data.zsize
if xsize>100 || ysize>100
  @fullyrefreshedautos=false
else
  for y in 0...ysize
    for x in 0...xsize
    haveautotile=false
    for z in 0...zsize
    id = @map_data[x, y, z]
    next if id==0 || id>=384 || @priorities[id]!=0 || !@priorities[id]
    next if @framecount[id/48-1]<2
    haveautotile=true
    break
    end
    @prioautotiles.push([x,y]) if haveautotile
    end
  end
  @fullyrefreshedautos=true
end
else
@fullyrefreshedautos=true
end
end
def map_data=(value)
@map_data=value
@tilesetChanged=true
end
def refreshFlashSprite
return if !@Flash || @flash_data.nil?
ptX=@ox-@oxFlash
ptY=@oy-@oyFlash
if !@firsttimeflash&&!@usedsprites&&
  ptX>=0&&[email protected]<[email protected]&&
  ptY>=0&&[email protected]<[email protected]
@flash.ox=0
@flash.oy=0
@flash.src_rect.set(ptX.round,ptY.round,
    @viewport.rect.width,@viewport.rect.height)
return
end
[email protected]
[email protected]
[email protected]
ysize=@map_data.ysize
xsize=@map_data.xsize
zsize=@map_data.zsize
@firsttimeflash=false
@oxFlash=@ox-(width>>2)
@oyFlash=@oy-(height>>2)
@flash.ox=0
@flash.oy=0
@flash.src_rect.set(width>>2,
height>>2,
    @viewport.rect.width,@viewport.rect.height)
@flash.bitmap.clear
@[email protected]
@[email protected]
xStart=(@oxFlash>>5)
xStart=0 if xStart<0
yStart=(@oyFlash>>5)
yStart=0 if yStart<0
xEnd=xStart+(width>>5)+1
yEnd=yStart+(height>>5)+1
xEnd=xsize if xEnd>=xsize
yEnd=ysize if yEnd>=ysize
if xStart<xEnd&&yStart<yEnd
yrange=yStart...yEnd
xrange=xStart...xEnd
tmpcolor=Color.new(0,0,0,0)
for y in yrange
  ypos=(y<<5)-@oyFlash
  for x in xrange
    xpos=(x<<5)-@oxFlash
    id = @flash_data[x, y, 0]
    r=(id>>8)&15
    g=(id>>4)&15
    b=(id)&15
    tmpcolor.set(r*16,g*16,b*16)
    bitmap.fill_rect(xpos,ypos,32,32,tmpcolor)
  end
end
end
end
def refreshLayer0(autotiles=false)
ptX=@ox-@oxLayer0
ptY=@oy-@oyLayer0
if !autotiles&&!@firsttime&&!@usedsprites&&
  ptX>=0&&[email protected]<[email protected]&&
  ptY>=0&&[email protected]<[email protected]
if @layer0clip
  @layer0.ox=0
  @layer0.oy=0
  @layer0.src_rect.set(ptX.round,ptY.round,
    @viewport.rect.width,@viewport.rect.height)
else
  @layer0.ox=ptX.round
  @layer0.oy=ptY.round
  @layer0.src_rect.set(0,0,@layer0.bitmap.width,@layer0.bitmap.height)
end
return true
end
[email protected]
[email protected]
[email protected]
ysize=@map_data.ysize
xsize=@map_data.xsize
zsize=@map_data.zsize
if autotiles
return true if @fullyrefreshedautos&&@prioautotiles.length==0
return true if !shown?
xStart=(@oxLayer0>>5)
xStart=0 if xStart<0
yStart=(@oyLayer0>>5)
yStart=0 if yStart<0
xEnd=xStart+(width>>5)+1
yEnd=yStart+(height>>5)+1
xEnd=xsize if xEnd>xsize
yEnd=ysize if yEnd>ysize
return true if xStart>=xEnd || yStart>=yEnd
trans=Color.new(0,0,0,0)
temprect=Rect.new(0,0,0,0)
tilerect=Rect.new(0,0,32,32)
range=0...zsize
overallcount=0
count=0
if !@fullyrefreshedautos
  for y in yStart..yEnd
  for x in xStart..xEnd
    haveautotile=false
    for z in range
    id = @map_data[x, y, z]
    next if id<48 || id>=384 || @priorities[id]!=0 || !@priorities[id]
    next if @framecount[id/48-1]<2
    haveautotile=true
    break
    end
    next if !haveautotile
    overallcount+=1
    xpos=(x<<5)-@oxLayer0
    ypos=(y<<5)-@oyLayer0
    bitmap.fill_rect(xpos,ypos,0,0,trans) if overallcount<=2000
    for z in range
    id = @map_data[x,y,z]
    next if id<48 || @priorities[id]!=0 || !@priorities[id]
    if overallcount>2000
    count=addTile(@autosprites,count,xpos,ypos,id)
    next
    elsif id>=384
    temprect.set((id - 384) % 8 * 32, (id - 384) / 8 * 32,32,32)
    bitmap.blt(xpos,ypos,@tileset,temprect)
    else
    tilebitmap=@autotileInfo[id]
    if !tilebitmap
      anim=autotileFrame(id)
      next if anim<0
      tilebitmap=Bitmap.new(32,32)
      bltAutotile(tilebitmap,0,0,id,anim)
      @autotileInfo[id]=tilebitmap
    end
    bitmap.blt(xpos,ypos,tilebitmap,tilerect)
    end
    end
  end
  end
else
  for tile in @prioautotiles
  x=tile[0]
  y=tile[1]
  next if x<xStart||x>xEnd
  next if y<yStart||y>yEnd
  overallcount+=1
  xpos=(x<<5)-@oxLayer0
  ypos=(y<<5)-@oyLayer0
  bitmap.fill_rect(xpos,ypos,0,0,trans) if overallcount<=2000
  for z in range
    id = @map_data[x,y,z]
    next if id<48 || @priorities[id]!=0 || !@priorities[id]
    if overallcount>2000
    count=addTile(@autosprites,count,xpos,ypos,id)
    next
    elsif id>=384
    temprect.set((id - 384) % 8 * 32, (id - 384) / 8 * 32,32,32)
    bitmap.blt(xpos,ypos,@tileset,temprect)
    else
    tilebitmap=@autotileInfo[id]
    if !tilebitmap
      anim=autotileFrame(id)
      next if anim<0
      tilebitmap=Bitmap.new(32,32)
      bltAutotile(tilebitmap,0,0,id,anim)
      @autotileInfo[id]=tilebitmap
    end
    bitmap.blt(xpos,ypos,tilebitmap,tilerect)
    end
  end
  end
end
Graphics.frame_reset if overallcount>2000
@usedsprites=false
return true
end
return false if @usedsprites
@firsttime=false
@oxLayer0=@ox-(width>>2)
@oyLayer0=@oy-(height>>2)
if @layer0clip
@layer0.ox=0
@layer0.oy=0
@layer0.src_rect.set(width>>2,height>>2,
    @viewport.rect.width,@viewport.rect.height)
else
@layer0.ox=(width>>2)
@layer0.oy=(height>>2)
end
@layer0.bitmap.clear
@[email protected]
@[email protected]
xStart=(@oxLayer0>>5)
xStart=0 if xStart<0
yStart=(@oyLayer0>>5)
yStart=0 if yStart<0
xEnd=xStart+(width>>5)+1
yEnd=yStart+(height>>5)+1
xEnd=xsize if xEnd>=xsize
yEnd=ysize if yEnd>=ysize
if xStart<xEnd&&yStart<yEnd
tmprect=Rect.new(0,0,0,0)
yrange=yStart...yEnd
xrange=xStart...xEnd
for z in 0...zsize
  for y in yrange
  ypos=(y<<5)-@oyLayer0
  for x in xrange
    xpos=(x<<5)-@oxLayer0
    id = @map_data[x, y, z]
    next if id==0 || @priorities[id]!=0 || !@priorities[id]
    if id>=384
    tmprect.set((id - 384) % 8 * 32, (id - 384) / 8 * 32,32,32)
    bitmap.blt(xpos,ypos,@tileset,tmprect)
    else
    frame=autotileFrame(id)
    bltAutotile(bitmap,xpos,ypos,id,frame)
    end
  end
  end
end
Graphics.frame_reset
end
return true
end
def getResizeFactor
return $ResizeFactor ? $ResizeFactor : 1.0
end
def ox=(val)
  val=(val*getResizeFactor).to_i
  val=(val/getResizeFactor).to_i
  wasshown=self.shown?
  @ox=val.floor
  @nowshown=(!wasshown&&self.shown?)
end
def oy=(val)
  val=(val*getResizeFactor).to_i
  val=(val/getResizeFactor).to_i
  wasshown=self.shown?
  @oy=val.floor
  @nowshown=(!wasshown&&self.shown?)
end
def visible=(val)
  wasshown=@visible
  @visible=val
  @nowshown=(!wasshown&&val)
end
def refresh(autotiles=false)
@oldOx=@ox
@oldOy=@oy
usesprites=false
if @layer0
@layer0.visible=@visible
usesprites=!refreshLayer0(autotiles)
if autotiles&&!usesprites
  return
end
else
usesprites=true
end
refreshFlashSprite
[email protected]
[email protected]
[email protected]+vpx
[email protected]+vpy
xsize=@map_data.xsize
ysize=@map_data.ysize
minX=(@ox/32)-1
maxX=((@[email protected])/32)+1
minY=(@oy/32)-1
maxY=((@[email protected])/32)+1
minX=0 if minX<0
minX=xsize-1 if minX>=xsize
maxX=0 if maxX<0
maxX=xsize-1 if maxX>=xsize
minY=0 if minY<0
minY=ysize-1 if minY>=ysize
maxY=0 if maxY<0
maxY=ysize-1 if maxY>=ysize
count=0
if minX<maxX&&minY<maxY
@usedsprites=usesprites || @usedsprites
if @layer0
  @layer0.visible=false if usesprites
end
if @fullyrefreshed
  for prio in @priotiles
  next if prio[0]<minX||prio[0]>maxX
  next if prio[1]<minY||prio[1]>maxY
  id=prio[3]
  xpos=(prio[0]<<5)-@ox
  ypos=(prio[1]<<5)-@oy
  count=addTile(@tiles,count,xpos,ypos,id)
  end
else
  for z in 0...@map_data.zsize
  for y in minY..maxY
    for x in minX..maxX
    id = @map_data[x, y, z]
    next if id==0 || !@priorities[id]
    next if @priorities[id]==0
    xpos=(x<<5)-@ox
    ypos=(y<<5)-@oy
    count=addTile(@tiles,count,xpos,ypos,id)
    end
  end
  end
end
end
if count<@tiles.length
bigchange=(count<=(@tiles.length*2/3))&&(@tiles.length*2/3)>25
j=count;[email protected];while j<len
  sprite=@tiles[j]
  @tiles[j+1]=-1
  if bigchange
  sprite.dispose
  @tiles[j]=nil
  @tiles[j+1]=nil
  elsif !@tiles[j].disposed?
  sprite.visible=false if sprite.visible
  end
  j+=2
end
@tiles.compact! if bigchange
end
end
end
=begin

  脚本:【完美输入法修正】
  
  功能:输入法。
  
  说明: 直接用Type_Field创建输入域即可进行输入,在此可根据Type_Field域对象
  
        的活动标记active来自定义刷新等,在Type_Field中需要自己处理特殊按键
        
        的处理方法。具体不明白之处请参考范例工程。

  作者:灼眼的夏娜
  
  补充: 至于以前那个版本也许很多人都注意到那个烦人的问题了吧,按Enter和Tab那
  
        些会出现不爽的声音,这个版本解决了那个问题,并简化添加了Type_Field类
        
        来方便创建输入域。

=end

#==============================================================================
# ■ RInput
#------------------------------------------------------------------------------
#  全键盘处理的模块。
#==============================================================================
module RInput
  
  #--------------------------------------------------------------------------
  # ● 常量定义
  #--------------------------------------------------------------------------
  ENTER             = 0x0D
  SPACE             = 0x20
  UP                = 0x26
  DOWN              = 0x28
  LEFT              = 0x25
  RIGHT             = 0x27
  
  LCTRL             = 0xA2
  LALT              = 0xA4

  #--------------------------------------------------------------------------
  # ● 临时Hash
  #--------------------------------------------------------------------------
  @R_Key_Hash = {}
  @R_Key_Repeat = {}
  
  #--------------------------------------------------------------------------
  # ● 唯一API
  #--------------------------------------------------------------------------
  GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')

  #--------------------------------------------------------------------------
  # ● 单键处理
  #--------------------------------------------------------------------------
  def self.trigger?(rkey)
    result = GetKeyState.call(rkey)
    if @R_Key_Hash[rkey] == 1 and result != 0
      return false
    end
    if result != 0
      @R_Key_Hash[rkey] = 1
      return true
    else
      @R_Key_Hash[rkey] = 0
      return false
    end
  end

end

#==============================================================================
# ■ EasyConv
#------------------------------------------------------------------------------
#  转码模块。
#==============================================================================
module EasyConv

  #--------------------------------------------------------------------------
  # ● 常量定义
  #--------------------------------------------------------------------------
  CP_ACP = 0
  CP_UTF8 = 65001

  #--------------------------------------------------------------------------
  # ● 模块函数
  #--------------------------------------------------------------------------
  module_function
  
  #--------------------------------------------------------------------------
  # ● 转码
  #--------------------------------------------------------------------------
  def s2u(text)

    m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
    w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')

    len = m2w.call(CP_ACP, 0, text, -1, nil, 0)
    buf = "\0" * (len*2)
    m2w.call(CP_ACP, 0, text, -1, buf, buf.size/2)

    len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil)
    ret = "\0" * len
    w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil)
    ret[-1] = ""
   
    return ret
  end

  #--------------------------------------------------------------------------
  # ● 转码
  #--------------------------------------------------------------------------
  def u2s(text)
   
    m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
    w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')

    len = m2w.call(CP_UTF8, 0, text, -1, nil, 0)
    buf = "\0" * (len*2)
    m2w.call(CP_UTF8, 0, text, -1, buf, buf.size/2)

    len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
    ret = "\0" * len
    w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil)
   
    return ret
  end

end

#==============================================================================
# ■ TypeAPI
#------------------------------------------------------------------------------
#  输入法相关API模块。
#==============================================================================
module TypeAPI
  
  #--------------------------------------------------------------------------
  # ● API定义
  #--------------------------------------------------------------------------
  GPPS         = Win32API.new("kernel32","GetPrivateProfileString",'pppplp','l')
  FindWindow   = Win32API.new("user32", "FindWindow", 'pp', 'i')
  CreateWindow = Win32API.new("NetGame","CreatWnd",'l','l')
  SetHK        = Win32API.new("NetGame","SetHK",'v','v')
  GetText      = Win32API.new("NetGame","GetWndText",'l','p')
  SetFocus     = Win32API.new("user32","SetFocus",'l','l')
  IfBack       = Win32API.new("NetGame","If_Back",'v','i')
  StartType    = Win32API.new("NetGame","StartType",'v','v')
  EndType      = Win32API.new("NetGame","EndType",'v','v')
  GetKeyInfos  = Win32API.new("NetGame","GetKeyInfo",'v','i')
  
  #--------------------------------------------------------------------------
  # ● 模块函数
  #--------------------------------------------------------------------------
  module_function
  
  #--------------------------------------------------------------------------
  # ● 获取参数
  #--------------------------------------------------------------------------
  def getParam
    val = "\0" * 256
    GPPS.call("Game","Title","",val,256,"./Game.ini")
    val.delete!("\0")
    return val
  end
  
  #--------------------------------------------------------------------------
  # ● 获取窗口
  #--------------------------------------------------------------------------
  def findWindow
    return FindWindow.call("RGSS Player",self.getParam)
  end
  
  #--------------------------------------------------------------------------
  # ● 创建窗口
  #--------------------------------------------------------------------------
  def createWindow(hwnd)
    return CreateWindow.call(hwnd)
  end
  
  #--------------------------------------------------------------------------
  # ● 设置HK
  #--------------------------------------------------------------------------
  def setHK
    SetHK.call
  end
  
  #--------------------------------------------------------------------------
  # ● 获取文字
  #--------------------------------------------------------------------------
  def getText
    return EasyConv.s2u(GetText.call(@subhwnd))
  end
  
  #--------------------------------------------------------------------------
  # ● 设置焦点
  #--------------------------------------------------------------------------
  def setFocus
    SetFocus.call(@subhwnd)
  end
  
  #--------------------------------------------------------------------------
  # ● 转换焦点
  #--------------------------------------------------------------------------
  def lostFocus
    SetFocus.call(@hwnd)
  end
  
  #--------------------------------------------------------------------------
  # ● 退格判定
  #--------------------------------------------------------------------------
  def ifBack
    return IfBack.call
  end
  
  #--------------------------------------------------------------------------
  # ● 开始输入
  #--------------------------------------------------------------------------
  def startType
    StartType.call
  end
  
  #--------------------------------------------------------------------------
  # ● 结束输入
  #--------------------------------------------------------------------------
  def endType
    EndType.call
  end
  
  #--------------------------------------------------------------------------
  # ● 输入中特殊按键处理
  #--------------------------------------------------------------------------
  def getKeyInfos
    return GetKeyInfos.call
  end
  
  #--------------------------------------------------------------------------
  # ● 获取句柄
  #--------------------------------------------------------------------------
  @hwnd    = self.findWindow
  
  @subhwnd = self.createWindow(@hwnd)

  #--------------------------------------------------------------------------
  # ● 设置HK应用
  #--------------------------------------------------------------------------
  self.setHK
  
end

#==============================================================================
# ■ Type_Field
#------------------------------------------------------------------------------
#  处理输入域的类。
#==============================================================================
class Type_Field
  
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr(:active)
  
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize(v,default_text = "",default_careth = nil,default_fonts = 16,\
    default_fontc = Color.new(0,0,0))
    # active
    @active = true
    # 视口
    rect = v.rect
    @v = Viewport.new(rect.x,rect.y,rect.width,rect.height)
    @w = rect.width
    @h = rect.height
    # 属性
    @caret_h = default_careth.nil? ? @h : [@h,default_careth].min
    @caret_y = rect.y + (@h - @caret_h) / 2
    @font_size = [default_fonts,@h].min
    # 描绘contents
    @cts = Sprite.new(@v)
    @cts.bitmap = Bitmap.new(@w - 3,@h)
    @cts.bitmap.font.size = @font_size
    @cts.bitmap.font.color = default_fontc
    # 辅助属性
    @bk_count = 0
    @text = default_text.scan(/./)
    @max_width = @w - 3
    @caret_pos = @text.size
    @save_pos = @caret_pos
    # 光标Caret
    @v1 = Viewport.new(rect.x,@caret_y,@w + 3,@caret_h)
    @caret_sp = Sprite.new(@v1)
    @caret_bitmap = Bitmap.new(3,@caret_h)
    @caret_bitmap.fill_rect(0,0,1,@caret_h,Color.new(0,0,0,180))
    @caret_bitmap.fill_rect(1,0,1,@caret_h,Color.new(0,0,0))
    @caret_bitmap.fill_rect(2,0,1,@caret_h,Color.new(120,120,120))
    @caret_sp.bitmap = @caret_bitmap
    @caret_sp.x = self.get_width(@text[0,@caret_pos].to_s)
    @caret_sp.y = 0
    @caret_sp.visible = false
    @caret_flash_count = 0
    # 刷新
    refresh
    # 设置焦点
    TypeAPI.setFocus
    # 开始输入
    TypeAPI.startType
  end
  
  #--------------------------------------------------------------------------
  # ● 设置活动标记
  #--------------------------------------------------------------------------
  def active=(value)
    if value != true and value != false
      return
    end
    @active = value
    @caret_sp.visible = @active
  end
  
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    @caret_bitmap.dispose
    @caret_sp.bitmap.dispose
    @caret_sp.dispose
    @cts.bitmap.dispose
    @cts.dispose
    @v.dispose
    @v1.dispose
  end

  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    @cts.bitmap.clear
    @cts.bitmap.draw_text(0,0,@w,@h,@text.to_s)
  end

  #--------------------------------------------------------------------------
  # ● 获取文字
  #--------------------------------------------------------------------------
  def get_text
    return @text.to_s
  end

  #--------------------------------------------------------------------------
  # ● 取得字符宽度
  #--------------------------------------------------------------------------
  def get_width(str)
    return @cts.bitmap.text_size(str).width
  end
  
  #--------------------------------------------------------------------------
  # ● 更新
  #--------------------------------------------------------------------------
  def update
    # 非激活状态则返回
    unless @active
      return
    end
    # 获取按键信息
    key_info = TypeAPI.getKeyInfos
    case key_info
    when 0x09 # Tab
      # 按下 Tab 键的情况自己定义怎么处理
      return
    when 0x0d # Enter
      # 按下 Enter 键的情况自己定义怎么处理
      return
    when 0x1B # Esc
      # 按下 Esc 键的情况自己定义怎么处理
      return
    end
    self.update_text
    self.update_lrb
    self.update_back
    self.update_caret
  end

  #--------------------------------------------------------------------------
  # ● 更新文字
  #--------------------------------------------------------------------------
  def update_text
    # 文字刷新
    TypeAPI.setFocus
    text = TypeAPI.getText
    if text != ""
      for char in text.scan(/./)
        if self.get_width(@text.to_s + char) <= @max_width
          @text[@caret_pos,0] = char
          @caret_pos += 1
        else
          break
        end
      end
      refresh
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 更新左右按键
  #--------------------------------------------------------------------------
  def update_lrb
    if RInput.trigger?(RInput::LEFT) and @caret_pos > 0
      @caret_pos -= 1
      return
    end
    if RInput.trigger?(RInput::RIGHT) and @caret_pos < @text.size
      @caret_pos += 1
      return
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 更新退格
  #--------------------------------------------------------------------------
  def update_back
    # 前退格处理
    @bk_count += TypeAPI.ifBack
    if @bk_count > 0
      @bk_count -= 1
      if @caret_pos > 0
        @text.delete_at(@caret_pos - 1);@caret_pos -= 1;refresh
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 更新光标闪烁
  #--------------------------------------------------------------------------
  def update_caret
    # 闪烁计时
    @caret_flash_count += 1
    if @caret_flash_count == 20
      @caret_sp.visible = !@caret_sp.visible
      @caret_flash_count = 0
    end
    # Caret位置刷新
    if @save_pos != @caret_pos
      @save_pos = @caret_pos
      @caret_sp.x = self.get_width(@text[0,@save_pos].to_s)
    end
  end
  
end
  
其他没改..
   
6
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

7
发表于 2015-7-6 14:47:03 | 只看该作者
听说主站可以用http://6rweb.sinaapp.com/articles/3287

  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2015-7-6
帖子
6
8
 楼主| 发表于 2015-7-6 16:30:13 | 只看该作者
本帖最后由 ScoreEdition 于 2015-7-6 18:58 编辑
kuerlulu 发表于 2015-7-6 14:47
听说主站可以用http://6rweb.sinaapp.com/articles/3287


窗口大小是改变了,分辨率没变,影响到了战斗系统。。。。

呵呵,可能是因为我的问题吧。。。其他人都是要改大分辨率,我是要改小。。 = ={:2_258:}
大神就来了您俩,拜托再帮帮我吧。。。

献上几只精灵:
(版权所有,仿冒必究!)

噩梦瞳.png (1 KB, 下载次数: 18)

噩梦瞳.png

黑嘴.png (864 Bytes, 下载次数: 13)

黑嘴.png

花皇.png (593 Bytes, 下载次数: 13)

花皇.png

火龙竿.png (618 Bytes, 下载次数: 17)

火龙竿.png

嗜骨.png (653 Bytes, 下载次数: 19)

嗜骨.png
6
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2015-7-6
帖子
6
9
 楼主| 发表于 2015-7-6 20:26:34 | 只看该作者
算了吧。。。。。。。。。。。
6
回复 支持 反对

使用道具 举报

Lv4.逐梦者

【欧皇】

梦石
3
星屑
2066
在线时间
1004 小时
注册时间
2013-8-19
帖子
3486

开拓者

10
发表于 2015-7-6 20:31:09 | 只看该作者
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Graphics
  3. #------------------------------------------------------------------------------
  4. #  图像模块
  5. #==============================================================================
  6.  
  7. #--------------------------------------------------------------------------
  8. # ● 更待指定帧数
  9. #--------------------------------------------------------------------------
  10. def Graphics.wait(n)
  11.   n.times{self.update;yield if defined? yield}
  12. end
  13. #--------------------------------------------------------------------------
  14. # ● 获取窗口宽
  15. #--------------------------------------------------------------------------
  16. def Graphics.width
  17.   @width ||= 640
  18. end
  19. #--------------------------------------------------------------------------
  20. # ● 获取窗口高
  21. #--------------------------------------------------------------------------
  22. def Graphics.height
  23.   @height ||= 480
  24. end
  25. #--------------------------------------------------------------------------
  26. # ● 更改窗口大小
  27. #--------------------------------------------------------------------------
  28. def Graphics.resize_screen(width, height)
  29.   @width  ||= 640
  30.   @height ||= 480
  31.  
  32.   游戏ini名=".\\Game.ini"
  33.   val = "\0"*256
  34.   gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')
  35.   gps.call("Game", "Title", "", val, 256, 游戏ini名)
  36.   val.delete!("\0")
  37.   title = val
  38.   fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')
  39.   hWnd = fw.call("RGSS Player", title)
  40.   swp = Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')
  41.  
  42.   pointwds = [0,0,0,0].pack('llll')
  43.   pointcet = [0, 0].pack('ll')
  44.  
  45.   wdsrect = Win32API.new('user32.dll', 'GetWindowRect', 'lp', 'l')
  46.   client_screen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')
  47.  
  48.   wdsrect.call(hWnd,pointwds)
  49.   client_screen.call(hWnd, pointcet)
  50.  
  51.   wds = pointwds.unpack('llll')
  52.   cet = pointcet.unpack('ll')
  53.  
  54.   addw =  wds[2] - wds[0] - @width
  55.   addh =  wds[3] - wds[1] - @height
  56.  
  57.   x = wds[0] - (width - @width) / 2
  58.   y = wds[1] - (height - @height) / 2
  59.  
  60.   @width  = width
  61.   @height = height
  62.  
  63.   swp.call(hWnd, 0, x, y, @width + addw, @height + addh, 0x20)
  64. end
  65. Graphics.resize_screen(1280, 960)

最后一行改窗口大小
QQ:2223942063
Q群:365819625
贪吃方1.4
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 17:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表