小编Der*_*Jan的帖子

将纹理(绘制为平面3D对象)转换为模仿深度时,黑色线条会随机出现

我们正在使用XNA开发一个自上而下的RPG.最近我们在编写显示地图的代码时陷入了挫折.在绘制地图时,使用正常变换矩阵的自上而下视图,一切似乎都很好.当使用非平面变换矩阵时,例如挤压顶部或底部以模拟深度,当相机改变位置时,出现黑线(顶部或底部的行,当向左或向右挤压时的列).移动和放置似乎是随机的.(图片进一步提供.)

背景资料

地图由瓷砖组成.原始纹理具有由32x32像素组成的图块.我们通过创建2个三角形并在这些三角形上显示原始纹理的一部分来绘制切片.着色器为我们做了这个.有三层三角形.首先,我们绘制所有不透明的瓷砖和所有半透明和部分透明瓷砖的所有不透明像素,然后是所有半透明和部分透明的瓷砖和像素.这样可以正常工作(但是当我们使用浮点因子进行缩放时,有时颜色混合的线条位于切片行和/或列之间).

绘制状态

我们对所有瓷砖使用相同的rasterizerState,并且在绘制实体或半透明瓷砖时我们在两者之间切换.

_rasterizerState = new RasterizerState();
_rasterizerState.CullMode = CullMode.CullCounterClockwiseFace;

_solidDepthState = new DepthStencilState();
_solidDepthState.DepthBufferEnable = true;
_solidDepthState.DepthBufferWriteEnable = true;

_alphaDepthState = new DepthStencilState();
_alphaDepthState.DepthBufferEnable = true;
_alphaDepthState.DepthBufferWriteEnable = false;
Run Code Online (Sandbox Code Playgroud)

在阴影中,我们将SpriteBlendMode设置如下:

第一个固体层1使用

AlphaBlendEnable = False; 
SrcBlend = One; 
DestBlend = Zero; 
Run Code Online (Sandbox Code Playgroud)

所有其他实心和透明层(稍后绘制)使用

AlphaBlendEnable = True; 
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha; 
Run Code Online (Sandbox Code Playgroud)

其他着色器也使用它.在SpriteBatchSpriteFonts使用的,使用默认设置.

生成的纹理

一些图块即时生成并保存到文件中.加载地图时会加载该文件.这是使用RenderTarget如下创建完成的:

RenderTarget2D rt = new RenderTarget2D(sb.GraphicsDevice, 768, 1792, false, 
    SurfaceFormat.Color, DepthFormat.None);
    sb.GraphicsDevice.SetRenderTarget(rt);
Run Code Online (Sandbox Code Playgroud)

生成后,文件将被保存并加载(因此,当设备重置时,我们不会丢失它,因为它不再存在于a RenderTarget).我尝试使用mipmapping,但它是一个spritesheet.没有关于瓷砖放置位置的信息,因此mipmapping是无用的,并没有解决问题.

顶点

我们遍历每个位置.这里没有浮点,但位置是Vector3(Float3).

for (UInt16 …
Run Code Online (Sandbox Code Playgroud)

c# graphics shader xna

51
推荐指数
2
解决办法
1461
查看次数

如何使Rails 3 JSON解析双重引用的字符串和单个数字

背景

json.org网站,一个字符串被定义为"char+"其中char+的一个或多个char.A char是除了"或之外的任何unicode字符\.允许控制字符的子集,只是逃避它们:

"foo" "2" "\\"

在Javascript中,如果要解析字符串,则需要将其括起来:

"\"foo\""或者'"foo"',但不是"'foo'"

在Rails 3中,运行C或纯Ruby代码的JSON gem是默认的.


根据接受的答案,gem解析JSON文档而不是元素.文档是键,值(对象/哈希)或值(数组)形式的集合.


问题

字符串

假设我们要解析字符串foo,我们需要将其括起来"\"foo\""'"foo"'

JSON.parse("\"foo\"")
JSON.parse('"foo"')
Run Code Online (Sandbox Code Playgroud)

JSON::ParserError unexpected token at '"foo"' 
Run Code Online (Sandbox Code Playgroud)

意思是它无法解析 "foo"

数字

数字也是如此:'3'或者"3"会产生Needs at least two octets.较大的数字(八位字节是一个字节,因此两个utf8字符是两个字节):'42'或者"42"只是产生相同的数字JSON::ParserError unexpected token at '42'


解决方法

如果gem在数组中,它会正确解析这些东西:'["foo"]''[3]'

jsonstring = '"foo"'
JSON.parse( "[#{jsonstring}]" …
Run Code Online (Sandbox Code Playgroud)

ruby gem json ruby-on-rails ruby-on-rails-3

6
推荐指数
1
解决办法
1865
查看次数

Android webview不会从脚本src执行javascript

问题

webview实际上并不执行从远程位置通过src加载的脚本

检查并仔细检查

  • 许可: <uses-permission android:name="android.permission.INTERNET" />

  • 该文件http://localhost/android/test.js存在

  • view.getSettings().setJavaScriptEnabled(true);在加载URL之前调用它

代码

鉴于a WebView view和aContext context

建立一个文件

它需要cookie,因此需要动态构建它.file:// urls不允许使用cookie.无论哪种方式,这'应该'工作得很好.

String html =
        "<html>\n" +
        "<head>\n" +
        "</head>\n" +
        "<body>\n" +
        "<script src=\"http://localhost/android/test.js\"  type=\"text/javascript\"></script>\n" +
        "</body>\n" +
        "</html>";
String mime = "text/html";
String encoding = "utf-8";
Run Code Online (Sandbox Code Playgroud)

已启用Cookie

简单的功能,以确保设备保留cookie.

CookieSyncManager.createInstance(context);
CookieSyncManager.getInstance().sync();
Run Code Online (Sandbox Code Playgroud)

创建用于记录的chrome客户端

记录所有消息[两次],当页面完成后,加载执行一个功能.这实际上运作良好.添加更多[远程]脚本标记会延迟执行.

WebChromeClient client = new WebChromeClient ( ) {
        @Override
        public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
            Log.e( "JSINTERFACE", consoleMessage.message() );
            return super.onConsoleMessage(consoleMessage);
        }

        @Override
        public void onProgressChanged(WebView view, …
Run Code Online (Sandbox Code Playgroud)

javascript android adk android-webview

5
推荐指数
0
解决办法
2356
查看次数

为什么"\n"是Javascript中的数字"NaN"

在Chrome和Firefox上的JavaScript中:

isNaN( "\n" )给出false
parseFloat ( "\n" )NaN

同样是产生了\t,\r\f".

  • \n 是一个数字
  • 解析\n给你不是数字.
  • 转义字符,如NULL字节\0,\\并按\"预期工作.
  • 我们知道这NaN是一个数字,只是不能代表任何其他价值
  • \n数字也是如此,这是不可表示的.

为什么浏览器会这样实现?

javascript parsing nan control-characters

3
推荐指数
1
解决办法
230
查看次数