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

Project1

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

[左对齐,右对齐,居中]的实现

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
238 小时
注册时间
2006-10-2
帖子
417
跳转到指定楼层
1
发表于 2007-12-15 11:54:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在写脚本的时候,有时会涉及到“左对齐”,“右对齐”或者“居中”的概念。这些东西看起来不起眼,实现起来还是需要思考一下的。

先用图来分析一下“左对齐”,“右对齐”和“居中”。
(我自己的概念。和RM在draw_text等内部的方法可能不一样。没有试验过。)


[左对齐]

[右对齐]

[居中]



在逐个描绘的时候,
左对齐的情况是最简单的,只要从原点不停地增加x坐标便能办到。
右对齐的情况下,从原点依次x坐标减去宽度,便能办到。

居中的情况比较复杂。分奇数和偶数两种情况。我是如下处理的:
在奇数个描绘对象时,先取出最中间一个对象,从原点处开始描绘。再将此对象之前的对象,从原点扩展一个宽度的距离后,全部用右对齐的方式描绘;之后的对象,从原点扩展一个宽度的距离后,全部以左对齐的方式描绘。
在偶数个描绘对象时,直接将对象分成前后两部分。前一部分,从原点缩进半个宽度的距离后,全部以右对齐的方式描绘;后一部分,从原点缩进半个宽度的距离后,全部以左对齐的方式描绘。


自用脚本一个。从神思的脚本http://rpg.blue/web/htm/news629.htm改来的脚本。不能直接使用(需配合素材)。但作对本文理解的一个参考,还是可以的。
  1. class Bitmap
  2.    
  3.   def draw_picnumber(x, y, nu,pic = RPG::Cache.picture("数字0"),k = 0)

  4.     w = pic.width
  5.     h = pic.height
  6.     re = Rect.new(0,0,w,h)
  7.     nu=nu.to_s

  8.     ar = nu.split(//)

  9.     for i in 0...ar.size
  10.       ar[i] = ar[i].to_i
  11.     end
  12.     case k
  13.     when 0
  14.            x = x                   #左对齐
  15.            for sz in ar
  16.               shuzi = sz
  17.               self.blt(x,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  18.               x+= w
  19.             end
  20.             
  21.      when 2
  22.            x += w*(1 - ar.size)    #右对齐
  23.             for sz in ar
  24.               shuzi = sz
  25.               self.blt(x,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  26.               x+= w
  27.             end
  28.             
  29.      when 1 #居中
  30.             pf = ar.size
  31.             nn = (-1)**pf
  32.             ar1 =[]
  33.             ar2 =[]
  34.             if nn == 1 #偶数
  35.               mi = ar.size/2 #2
  36.               for i in 0..(mi - 1) #0,1
  37.                 ar1.push(ar[i])
  38.               end
  39.               for i in mi..(ar.size-1) #2,3
  40.                 ar2.push(ar[i])
  41.               end
  42.               #开始描绘
  43.               x1 = x -(w/2)  #left
  44.               x1 -= w*(ar1.size)
  45.               for sz1 in ar1
  46.                 shuzi = sz1
  47.                 self.blt(x1,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  48.                 x1+= w
  49.               end
  50.               
  51.               x2 = x -(w/2)#right
  52.               for sz2 in ar2
  53.                 shuzi = sz2
  54.                 self.blt(x2,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  55.                 x2+= w
  56.               end
  57.               
  58.             else #奇数
  59.               mi = (ar.size-1)/2 #2
  60.               for i in 0..(mi - 1) #0,1
  61.                 ar1.push(ar[i])
  62.               end
  63.               for i in (mi+1)..(ar.size-1) #3,4
  64.                 ar2.push(ar[i])
  65.               end
  66.               #开始描绘
  67.                 shuzi = ar[mi]
  68.                 self.blt(x,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  69.                
  70.               x1 = x   #left
  71.               x1 -= w*(ar1.size)
  72.               for sz1 in ar1
  73.                 shuzi = sz1
  74.                 self.blt(x1,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  75.                 x1+= w
  76.               end
  77.               
  78.               x2 = x +w #right
  79.               for sz2 in ar2
  80.                 shuzi = sz2
  81.                 self.blt(x2,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  82.                 x2+= w
  83.               end
  84.             end
  85.         end
  86.   end
  87. end
复制代码
山寨产品龟速制作中……

Lv1.梦旅人

梦石
0
星屑
50
在线时间
238 小时
注册时间
2006-10-2
帖子
417
2
 楼主| 发表于 2007-12-15 11:54:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在写脚本的时候,有时会涉及到“左对齐”,“右对齐”或者“居中”的概念。这些东西看起来不起眼,实现起来还是需要思考一下的。

先用图来分析一下“左对齐”,“右对齐”和“居中”。
(我自己的概念。和RM在draw_text等内部的方法可能不一样。没有试验过。)


[左对齐]

[右对齐]

[居中]



在逐个描绘的时候,
左对齐的情况是最简单的,只要从原点不停地增加x坐标便能办到。
右对齐的情况下,从原点依次x坐标减去宽度,便能办到。

居中的情况比较复杂。分奇数和偶数两种情况。我是如下处理的:
在奇数个描绘对象时,先取出最中间一个对象,从原点处开始描绘。再将此对象之前的对象,从原点扩展一个宽度的距离后,全部用右对齐的方式描绘;之后的对象,从原点扩展一个宽度的距离后,全部以左对齐的方式描绘。
在偶数个描绘对象时,直接将对象分成前后两部分。前一部分,从原点缩进半个宽度的距离后,全部以右对齐的方式描绘;后一部分,从原点缩进半个宽度的距离后,全部以左对齐的方式描绘。


自用脚本一个。从神思的脚本http://rpg.blue/web/htm/news629.htm改来的脚本。不能直接使用(需配合素材)。但作对本文理解的一个参考,还是可以的。
  1. class Bitmap
  2.    
  3.   def draw_picnumber(x, y, nu,pic = RPG::Cache.picture("数字0"),k = 0)

  4.     w = pic.width
  5.     h = pic.height
  6.     re = Rect.new(0,0,w,h)
  7.     nu=nu.to_s

  8.     ar = nu.split(//)

  9.     for i in 0...ar.size
  10.       ar[i] = ar[i].to_i
  11.     end
  12.     case k
  13.     when 0
  14.            x = x                   #左对齐
  15.            for sz in ar
  16.               shuzi = sz
  17.               self.blt(x,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  18.               x+= w
  19.             end
  20.             
  21.      when 2
  22.            x += w*(1 - ar.size)    #右对齐
  23.             for sz in ar
  24.               shuzi = sz
  25.               self.blt(x,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  26.               x+= w
  27.             end
  28.             
  29.      when 1 #居中
  30.             pf = ar.size
  31.             nn = (-1)**pf
  32.             ar1 =[]
  33.             ar2 =[]
  34.             if nn == 1 #偶数
  35.               mi = ar.size/2 #2
  36.               for i in 0..(mi - 1) #0,1
  37.                 ar1.push(ar[i])
  38.               end
  39.               for i in mi..(ar.size-1) #2,3
  40.                 ar2.push(ar[i])
  41.               end
  42.               #开始描绘
  43.               x1 = x -(w/2)  #left
  44.               x1 -= w*(ar1.size)
  45.               for sz1 in ar1
  46.                 shuzi = sz1
  47.                 self.blt(x1,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  48.                 x1+= w
  49.               end
  50.               
  51.               x2 = x -(w/2)#right
  52.               for sz2 in ar2
  53.                 shuzi = sz2
  54.                 self.blt(x2,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  55.                 x2+= w
  56.               end
  57.               
  58.             else #奇数
  59.               mi = (ar.size-1)/2 #2
  60.               for i in 0..(mi - 1) #0,1
  61.                 ar1.push(ar[i])
  62.               end
  63.               for i in (mi+1)..(ar.size-1) #3,4
  64.                 ar2.push(ar[i])
  65.               end
  66.               #开始描绘
  67.                 shuzi = ar[mi]
  68.                 self.blt(x,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  69.                
  70.               x1 = x   #left
  71.               x1 -= w*(ar1.size)
  72.               for sz1 in ar1
  73.                 shuzi = sz1
  74.                 self.blt(x1,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  75.                 x1+= w
  76.               end
  77.               
  78.               x2 = x +w #right
  79.               for sz2 in ar2
  80.                 shuzi = sz2
  81.                 self.blt(x2,y,pict = RPG::Cache.picture("数字"+shuzi.to_s),re)
  82.                 x2+= w
  83.               end
  84.             end
  85.         end
  86.   end
  87. end
复制代码
山寨产品龟速制作中……
头像被屏蔽

Lv1.梦旅人 (禁止发言)

心无天使

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-12-15
帖子
1016
3
发表于 2007-12-15 19:12:59 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
238 小时
注册时间
2006-10-2
帖子
417
4
 楼主| 发表于 2007-12-19 20:54:40 | 只看该作者
= =谢谢小绿(根据头发…),其实只是打算给用得着的人一个思路。脚本有空我会改一下。


补充一点。若操作的对象是String,还可以用以下的方法

center(width)
ljust(width)
rjust(width)
center(width[, padding])
ljust(width[, padding])  
rjust(width[, padding])
分别返回居中、靠左、靠右的字符串。
  1. p "foo".center(10)      # => "   foo    "
  2. p "foo".ljust(10)       # => "foo       "
  3. p "foo".rjust(10)       # => "       foo"
复制代码

当字符串长度超过width时,将返回原字符串的拷贝。
  1. s = "foo"
  2. p s.center(1).id == s.id   # => false
复制代码

若使用了第二参数padding的话,将使用padding来填充空白。
  1. p "foo".center(10,"*")      # => "***foo****"
  2. p "foo".ljust(10,"*")       # => "foo*******"
  3. p "foo".rjust(10,"*")       # => "*******foo"
复制代码


山寨产品龟速制作中……
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7946
在线时间
1182 小时
注册时间
2007-7-29
帖子
2055
5
发表于 2007-12-19 21:01:52 | 只看该作者
强人又发帖了!支持。{/qiang}
要说的都被楼主与小林说完了,我也没什么更好的建议。
只能说纯支持。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

沈黙栤冷

梦石
0
星屑
55
在线时间
5 小时
注册时间
2007-12-15
帖子
3048
6
发表于 2007-12-19 21:03:28 | 只看该作者
以下引用enghao_lim于2007-12-19 13:01:52的发言:

强人又发帖了!支持。
要说的都被楼主与小林说完了,我也没什么更好的建议。
只能说纯支持。

干什么用的??{/fd}
重来,一切将回更美好?我想不一定,因为苍天给予你的是最美好的结束……阿弥陀佛……(我了个去,关“阿弥陀佛”什么事?)
对于破解游戏,我无话可说,对于破解后宣传,我强烈鄙视,没错,我刚破解了某个正版游戏,想要吗?请自宫后,拿那个东西过来换吧。
……请用行动来支持国产游戏……
PS:谁有仙五破解版啊……(喂!PIA!)
什么情况,汽车漏胎?
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

心无天使

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-12-15
帖子
1016
7
发表于 2008-1-26 05:45:19 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
10
在线时间
1 小时
注册时间
2008-1-26
帖子
4
8
发表于 2008-1-26 23:17:43 | 只看该作者
{/se}{/se}{/se}{/se}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 02:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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