在过去一个月左右的时间里,我一直在努力学习DirectX.所以我一直在DirectX 9和10之间来回混音.我在两者中看到的一个主要变化是如何在图形卡中处理矢量.
我注意到的一个重大变化是你如何让GPU识别你的结构.在DirectX 9中,您可以定义灵活顶点格式.
您的典型设置如下:
#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
Run Code Online (Sandbox Code Playgroud)
在DirectX 10中,我相信等效的是输入顶点描述:
D3D10_INPUT_ELEMENT_DESC layout[] = {
{"POSITION",0,DXGI_FORMAT_R32G32B32_FLOAT, 0 , 0,
D3D10_INPUT_PER_VERTEX_DATA, 0},
{"COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT, 0 , 12,
D3D10_INPUT_PER_VERTEX_DATA, 0}
};
Run Code Online (Sandbox Code Playgroud)
我在DirectX 10中注意到它更具描述性.除此之外,还有一些重大变化,HLSL语法是否相同?
$starcraft = array(
"drone" => array( "cost" => "6_0-",
"gas" => "192",
"minerals" => "33",
"attack" => "123",
)
"zealot" => array( "cost" => "5_0-",
"gas" => "112",
"minerals" => "21",
"attack" => "321",
)
)
Run Code Online (Sandbox Code Playgroud)
我正在玩oop,我想使用类在这个数组中显示信息,但我不知道如何构造类来显示它.
这是我到目前为止所做的,我不知道从哪里开始.我应该使用二传手和吸气剂吗?
class gamesInfo($game) {
$unitname;
$cost;
$gas;
$minerals;
$attack;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个涉及不同模块的IPC的实时应用程序.这些模块正在进行一些数据密集型处理.我在原型中使用消息队列作为IPC的主干(Activemq),这很容易(考虑到我是一个完全的IPC新手),但它非常慢.
这是我的情况:
我一直在研究不同的IPC方法:套接字,管道,共享内存.但是,我没有IPC的经验,我绝对没有办法在3周内让这个演示失败......哪种IPC是安全的开始?
谢谢.百合
是否有一个PHP函数返回一个关联数组的行的总和?
如果不是,我应该只使用一个计数器和一个foreach循环?
欣赏它!
令人讨厌的是Python的sqlite3模块总是返回一个元组列表!当我查询单个列时,我宁愿得到一个简单的列表.
例如,当我执行
SELECT somecol FROM sometable
Run Code Online (Sandbox Code Playgroud)
并打电话
cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)
它返回
[(u'one',), (u'two',), (u'three',)]
Run Code Online (Sandbox Code Playgroud)
但我宁愿得到
[u'one', u'two', u'three']
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我正在尝试将战争雾应用于屏幕上当前对玩家不可见的区域.我通过将游戏内容渲染RenderTarget到另一个中并将战争迷雾渲染到另一个中来实现这一点,然后我将它们与效果文件合并,该效果文件从游戏中获取颜色RenderTarget并从战争雾渲染目标中获取alpha.FOW RenderTarget在FOW出现时为黑色,而在FOW出现时则为白色.
这确实有效,但它将战争的雾(未显示的位置)变成白色而不是黑色的预期颜色.
在应用效果之前,我将设备的后备缓冲区清除为白色.当我试图将它清除为黑色时,根本没有出现战争迷雾,我认为这是alpha混合黑色的产物.但它适用于所有其他颜色 - 为结果屏幕提供该颜色的色调.
如何在仍能够在两个渲染目标之间进行Alpha混合的同时实现黑雾?
应用FOW的渲染代码:
private RenderTarget2D mainTarget;
private RenderTarget2D lightTarget;
private void CombineRenderTargetsAndDraw()
{
batch.GraphicsDevice.SetRenderTarget(null);
batch.GraphicsDevice.Clear(Color.White);
fogOfWar.Parameters["LightsTexture"].SetValue(lightTarget);
batch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
fogOfWar.CurrentTechnique.Passes[0].Apply();
batch.Draw(
mainTarget,
new Rectangle(0, 0, batch.GraphicsDevice.PresentationParameters.BackBufferWidth, batch.GraphicsDevice.PresentationParameters.BackBufferHeight),
Color.White
);
batch.End();
}
Run Code Online (Sandbox Code Playgroud)
我用来应用FOW的效果文件:
texture LightsTexture;
sampler ColorSampler : register(s0);
sampler LightsSampler = sampler_state{
Texture = <LightsTexture>;
};
struct VertexShaderOutput
{
float4 Position : POSITION0;
float2 TexCoord : TEXCOORD0;
};
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
float2 tex = input.TexCoord;
float4 color = …Run Code Online (Sandbox Code Playgroud) 我有几个使用的库Debug.Assert(...).我认为这Debug.Assert(...)很好,我仍然希望它们执行,但我不希望它们阻止我的应用程序的执行.理想情况下,我只希望他们在某处登录.
鉴于我无法更改库的代码(我仍然希望在调试中编译并运行断言),如何阻止Debug.Assert(...)显示模式对话框?
另外,我想确保主程序在Assert发生时继续(与忽略按钮相同的行为).
谢谢!
如何访问包含文件中定义的变量?
# inc.rb
foo = "bar";
# main.rb
require 'inc.rb'
puts foo
# NameError: undefined local variable or method `foo' for main:Object
Run Code Online (Sandbox Code Playgroud) 我正在使用自定义字体和@ font-face标签.在Windows中,无论是Firefox,Chrome还是IE,一切看起来都很棒.
在Mac上,这是一个不同的故事.出于某种原因,Mac字体渲染器认为字体比它短很多.
例如,请考虑此测试代码(此处为实例):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Webble</title>
<style type="text/css">
@font-face
{
font-family: "Bubbleboy 2";
src: url("bubbleboy-2.ttf") format('truetype');
}
body
{
font-family: "Bubbleboy 2";
font-size: 30px;
}
div
{
background-color: maroon;
color: yellow;
height: 100px;
line-height: 100px;
}
</style>
</head>
<body>
<div>The quick brown fox jumped over the lazy dog.</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在Windows Firefox和Mac Firefox上打开它.用鼠标选择它.
在Windows上,您会注意到它完全选择了字体.
在Mac上,它只选择大约一半的字体.如果您查看它所选择的内容,您将看到该部分已居中,而不是字体的完整高度.
反正有没有解决这个相当大的差异?
我正在尝试使用deftype(来自流行的clojure 1.2分支)来创建一个实现java Servlet接口的java类.我希望下面的代码能够编译(即使它不是很有用).
(ns foo [:import [javax.servlet Servlet ServletRequest ServletResponse]])
(deftype servlet []
javax.servlet.Servlet
(service [this
#^javax.servlet.ServletRequest request
#^javax.servlet.ServletResponse response]
nil))
Run Code Online (Sandbox Code Playgroud)
但它没有编译.编译器生成消息:
Mismatched return type: service, expected: void, had: java.lang.Object
[Thrown class java.lang.IllegalArgumentException]
Run Code Online (Sandbox Code Playgroud)
这对我来说没有意义,因为我回来了.因此,方法的返回类型无效的事实应该不是问题.例如,对于java.util.Set接口:
(deftype bar [#^Number n] java.util.Set (clear [this] nil))
Run Code Online (Sandbox Code Playgroud)
编译没有问题.
那么我对Servlet接口做错了什么?
要明确:我知道典型的情况是将一个servlet抽象类子类化,而不是直接实现这个接口,但是仍然可以这样做.
堆栈跟踪:
(deftype servlet ...的堆栈跟踪是:
Mismatched return type: service, expected: void, had: java.lang.Object
[Thrown class java.lang.IllegalArgumentException]
Restarts:
0: [ABORT] Return to SLIME's top level.
Backtrace:
0: clojure.lang.Compiler$NewInstanceMethod.parse(Compiler.java:6461)
1: clojure.lang.Compiler$NewInstanceExpr.build(Compiler.java:6119)
2: clojure.lang.Compiler$NewInstanceExpr$DeftypeParser.parse(Compiler.java:6003)
3: clojure.lang.Compiler.analyzeSeq(Compiler.java:5289)
4: clojure.lang.Compiler.analyze(Compiler.java:5110)
5: …Run Code Online (Sandbox Code Playgroud)