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

Project1

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

[已经解决] 请教可否在rm内实现画图功能?

[复制链接]

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
跳转到指定楼层
1
发表于 2018-9-6 08:52:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
前提是有鼠标脚本。
请问可否在rm的脚本内实现画图功能?
就是windows自带的那种简单的画图。
没有色板的噢。
请教各位前辈,谢谢。
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。

Lv4.逐梦者

梦石
0
星屑
19284
在线时间
3074 小时
注册时间
2013-1-11
帖子
1288
2
发表于 2018-9-6 09:45:18 | 只看该作者
本帖最后由 张咚咚 于 2018-9-6 19:41 编辑
  1. canvas = Sprite.new
  2. canvas.bitmap = Bitmap.new(640,480)
  3. c = Color.new(255,255,255)

  4. while true
  5.   x = Mouse.x
  6.   y = Mouse.y
  7.   canvas.bitmap.fill_rect(x, y, 5, 5, c)
  8.   Graphics.update
  9. end
复制代码


场景调用

  1. class Scene_Draw
  2.   #--------------------------------------------------------------------------
  3.   # ● 主处理
  4.   #--------------------------------------------------------------------------
  5.   def main
  6.     @canvas = Sprite.new
  7.     @canvas.bitmap = Bitmap.new(640,480)
  8.     @c = Color.new(255,255,255)
  9.     # 执行过渡
  10.     Graphics.transition
  11.     # 主循环
  12.     loop do
  13.       # 刷新游戏画面
  14.       Graphics.update
  15.       # 刷新输入信息
  16.       Input.update
  17.       # 刷新画面
  18.       update
  19.       # 如果画面被切换就中断循环
  20.       if $scene != self
  21.         break
  22.       end
  23.     end
  24.     # 装备过渡
  25.     Graphics.freeze
  26.     # 释放标题图形
  27.     @canvas.bitmap.dispose
  28.     @canvas.dispose
  29.     @c.dispose
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 刷新画面
  33.   #--------------------------------------------------------------------------
  34.   def update
  35.     if Mouse.press?(:L) # 判断按住左键
  36.       x = Mouse.x  # 鼠标X的获取
  37.       y = Mouse.y  # 鼠标Y的获取
  38.       @canvas.bitmap.fill_rect(x, y, 5, 5, @c)
  39.     end
  40.   end
  41. end
复制代码

点评

会了下面有,你看看有啥問題  发表于 2018-9-7 15:37
如果想弄鼠标指著哪个sprite就擦掉要怎么写 (橡皮擦功能)  发表于 2018-9-6 22:51
不会消失的啊?引用一直存在,GC也不可能杀掉。。  发表于 2018-9-6 18:45
寫完一會兒会自动消失,如何不消失  发表于 2018-9-6 17:57
可以用Bitmap保存png那个脚本或者Tktk_Bitmap的dll  发表于 2018-9-6 16:57

评分

参与人数 2星屑 +150 +2 收起 理由
RyanBern + 150 + 1 认可答案
文雅夕露 + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14048
在线时间
2070 小时
注册时间
2016-9-20
帖子
844
3
发表于 2018-9-6 15:11:56 | 只看该作者
理论上就是点一下生成一个bitmap,多起来会不会卡出翔

点评

上面代码不是写了吗?直接fill或者set_pixel 啊 为什么要创建新的  发表于 2018-9-6 20:06
那么一个点是不是生成一个sprite  发表于 2018-9-6 18:21
为什么要生成bitmap 另外 bitmap数量和卡没关系 有关系的是sprite数量  发表于 2018-9-6 18:16
内容仅供参考,
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
4
 楼主| 发表于 2018-9-6 19:32:14 | 只看该作者

请问怎么写成场景里再调用呢?
暂时没有发现怎么使用啊,前辈能说明一下吗?
比如按左键才画线条等等。

点评

谢谢前辈指导,十分感谢。  发表于 2018-9-6 19:38
脚本在二楼  发表于 2018-9-6 19:36
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14048
在线时间
2070 小时
注册时间
2016-9-20
帖子
844
5
发表于 2018-9-7 15:36:57 | 只看该作者
本帖最后由 ppspssss 于 2018-9-7 18:01 编辑

楼主我做了个可以选顏色, 还可以用橡皮擦給你代碼參考
  1.   if  Kboard.keyb($R_Key_3) and  Kboard.keyb($R_Key_CTLR)
  2. @p_colourboard = Sprite.new if @p_colourboard == nil
  3. @p_colourboard.x = 100
  4. @p_colourboard.y = 100
  5. @p_colourboard.z = 100
  6. @p_colourboard.zoom_x = 1
  7. @p_colourboard.zoom_y = 1
  8. #@p_colourboard.bitmap = Bitmap.new(128,128)
  9. @p_colourboard.bitmap = RPG::Cache.picture("Talk_Image")
  10. end
  11. #Talk_Image繪畫板图片
复制代码
  1. if Kboard.keyb($R_Key_1) and  Kboard.keyb($R_Key_CTLR)
  2. #pst "#{@p_colourboard.bitmap.get_pixel($mx-100,$my-100)}" if @p_colourboard != nil# P顏色用
  3. $pen_colour = @p_colourboard.bitmap.get_pixel($mx-100,$my-100)
  4. end
  5. #取得鼠標标x,y ($mx,$my)坐標图片顏色作為畫筆顏色
复制代码

  1. if  Kboard.keyb($R_Key_2) and  Kboard.keyb($R_Key_CTLR)
  2. @p=[] if @p==nil
  3. a = Sprite.new #if @p ==nil
  4. a.bitmap = Bitmap.new(5,5)
  5. a.x = $mx
  6. a.y = $my
  7. a.z=100
  8. a.bitmap.fill_rect(0, 0, 5, 5, $pen_colour)
  9. #pst "#{$mx},#{$my}"
  10. @p.push(a)
  11. end
  12. #寫出點陣代碼
复制代码

  1. #写画橡皮擦
  2. return if @p == nil
  3. for i in [email protected]
  4. #pst "#{$mx},#{$my},,#{@p[i].x},#{@p[i].y}"
  5. if ($my-10) <@p[i].y and($my+10)>@p[i].y and ($mx-10)<@p[i].x and ($mx+10)>@p[i].x
  6. #  and
  7. #@p[i].bitmap.clear if @p[i] != nil #*删除点画
  8. #@p.delete_at(i) #*删除数组名(两个一起)
  9. @p[i].bitmap.clear  
  10. end
  11. end
复制代码


点评

我这个还是有大多改动空間, 看來sprite不能new那么多,一个就夠了,看看我能不能做出一个效率高点的版本  发表于 2018-9-10 12:33
不错不错,不只XP版本要做哪些改动  发表于 2018-9-8 20:18
为什么要new这么多精灵,不会卡的吗  发表于 2018-9-7 17:36
你好 偶然看到這個功能覺得很有趣,但是想問下,這個畫筆莫非只能點不能畫線的嗎?  发表于 2018-9-7 16:37

评分

参与人数 2星屑 +150 +2 收起 理由
RyanBern + 150 + 1 认可答案
文雅夕露 + 1 精品文章

查看全部评分

内容仅供参考,
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14048
在线时间
2070 小时
注册时间
2016-9-20
帖子
844
6
发表于 2018-9-7 18:22:39 | 只看该作者
ppspssss 发表于 2018-9-7 15:36
楼主我做了个可以选顏色, 还可以用橡皮擦給你代碼參考


这样还是只能画点 ,  要是画线之类的要用公式过于复杂,  还是能简侧简为好 , new多的話不会卡,因為使用 a.bitmap = Bitmap.new(5,5) 单个象素视窗只有5X5, 而我的測試50X50 畫了 100多个点都不卡
@ 眠  @张咚咚

点评

sprite那些我还不会, 初學的  发表于 2018-9-9 09:46
保存我说过了,论坛有bitmap保存png的脚本,或者度娘搜tktk_bitmap,日站的一个脚本也可以。  发表于 2018-9-7 19:00
我这样最笨的方法, sprite.new多, 但把他保存起來在@p數組中, 隨时能讀取他的數据,保存,  发表于 2018-9-7 18:57
1000个以上FPS掉到30FPS 2000个掉到FPS 20以下, 还是不會崩的 new得多精灵是為了保存方便下次讀取 保存方法你有什么好建議 ?  发表于 2018-9-7 18:50
new一千个试试,两千以上貌似会内存过高崩掉,话说fill不行吗,为什么要new这么多精灵。。  发表于 2018-9-7 18:38
内容仅供参考,
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-30 22:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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