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

Project1

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

[随意闲聊] 论RM Web的升级版实现方式……

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2010-7-10
帖子
111
跳转到指定楼层
1
发表于 2014-7-22 17:11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
鉴于前一个帖子反响不好……我就再来一个……
---
首先我们需要用某种语言重写RPG Maker自带的脚本和RGSS的基础类……
比如RPG Maker自带脚本用C#写,RGSS的一些图形类用MDX或者XNA或者Monogame或者Cocos-2d for XNA
总之要能够读取RM的数据……
然后用SliverLight包装,把数据渲染到RenderTarget……
同时为了减少服务器负担,必须设立缓存……
我们都知道RPG Maker的脚本里有一个Cache Module,放到C#里以后:
[box=PaleTurquois] 读取一个png
   如果png已经缓存
      返回png
   否则
      返回特定的未知贴图
      把下载png加入缓存队列
   结束[/box]
当然以上过程如果可以吧缓存的内容加密当然更加安全
那么这个SliverLight程序就是公用的脚本……对于一般的RPG游戏应该是应付的过来的
---
关于实现……
如果使用的是XNA的话,渲染到RenderTarget2D中,然后获取贴图,转换成SliverLight的贴图(其实就是拷贝……)
对于VA、VX、XP的小界面640x480,这个过程可以达到60fps……
640(Width)*480(Height)*4(Color,RGBA)*1(Byte Size)*60(Expect FPS)=73728000
可以看做复杂度O(73728000),基本可以……
---
论拷贝
C 代码复制
  1. protected Texture2D FillTexture(ref System.Drawing.Bitmap bitmap)
  2.                 {
  3.                         Texture2D tmpTex = new Texture2D(DGE.Graphics.Device, (int)bitmap.Width, (int)bitmap.Height);
  4.                         System.Drawing.Imaging.BitmapData colorMapTex = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
  5.                         Byte[] colorMap = new Byte[tmpTex.Width * tmpTex.Height * 4];
  6.                         int bound = Math.Abs(colorMapTex.Stride) * colorMapTex.Height;
  7.                         IntPtr ptr = colorMapTex.Scan0;
  8.                         System.Runtime.InteropServices.Marshal.Copy(ptr, colorMap, 0, bound);
  9.                         tmpTex.SetData<Byte>(colorMap);
  10.                         return tmpTex;
  11.                 }

---
论转换
C 代码复制
  1. GraphicsDevice graphicsDevice = GraphicsDevice;
  2.                         RenderTarget2D rt = new RenderTarget2D(graphicsDevice,640,480);
  3.  
  4.                         RenderTargetBinding[] old = graphicsDevice.GetRenderTargets();
  5.  
  6.                         graphicsDevice.SetRenderTarget(rt);
  7.  
  8.                         graphicsDevice.Clear(ClearOptions.Target, Color.Transparent, 0, 0);
  9.  
  10.                         SpriteBatch spriteBatch = new SpriteBatch(graphicsDevice);
  11.                         spriteBatch.Begin();
  12.  
  13.                         //Do Sth...
  14.  
  15.                         spriteBatch.End();
  16.                         spriteBatch.Dispose();
  17.  
  18.                         graphicsDevice.SetRenderTargets(old);
  19.  
  20.  
  21.                         graphicsDevice.Clear(Color.Transparent);
  22.  
  23.                         RenderTargetBinding binding = new RenderTargetBinding(rt);
  24.                         return binding.RenderTarget as Texture2D;

---
额呵呵……

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2010-7-10
帖子
111
2
 楼主| 发表于 2014-7-22 17:12:04 | 只看该作者
表示代码功能不能用……大家凑合着看
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
3
发表于 2014-7-22 20:03:26 | 只看该作者
如果脚本功能被你剪了,再怎么样什么都没用了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1256
在线时间
6552 小时
注册时间
2010-12-30
帖子
8949
4
发表于 2014-7-22 20:46:33 | 只看该作者
(ΦωΦ)可以试试用更自由的RM脚本库当基础,比如默认就跳过标题大家都用事件制作,屏蔽了菜单大家都用事件制作……(ΦωΦ)总之事件是万能的,把那些定义死的功能都屏蔽掉。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2010-7-10
帖子
111
5
 楼主| 发表于 2014-7-23 18:40:52 | 只看该作者
satgo1546 发表于 2014-7-22 20:03
如果脚本功能被你剪了,再怎么样什么都没用了。

脚本用C#写啊……再说,Ruby的编译器用C#更好实现,照样可以用Ruby写= =
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3121
在线时间
1534 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

6
发表于 2014-7-23 21:57:06 | 只看该作者
zhangchi5 发表于 2014-7-23 18:40
脚本用C#写啊……再说,Ruby的编译器用C#更好实现,照样可以用Ruby写= =


IronRuby:呵呵。
如果不打算用IronRuby,你需要花几天时间看CodeDOM那些让人足以发疯的文档。

Speak is cheap, show me the code --- Linus

点评

https://github.com/IronLanguages/main/tree/master/Languages/Ruby  发表于 2014-7-23 22:02
我总觉得Ruby作为一种可以即时编写即时使用,也就是不需要预先编译语言……应该很好实现……  发表于 2014-7-23 22:00
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-5 07:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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