我正在研究基于3D平铺的游戏,我正在使用AABB碰撞检测.对于玩家交叉的每个立方体,我发现玩家与立方体相交的轴最少,并沿着该轴将玩家推出立方体.
根据检查多维数据集的顺序,这可能会导致沿多个多维数据集的边缘滑动时出现问题.我创建了一个应该解释问题的图表:
关于解决这个问题的最有效方法的任何想法可能是什么?或者更好的方法来处理碰撞响应?
谢谢.
class CustomClass<T> where T: bool
{
public CustomClass(T defaultValue)
{
init(defaultValue); // why can't the compiler just use void init(bool) here?
}
public void init(bool defaultValue)
{
}
// public void init(int defaultValue) will be implemented later
}
Run Code Online (Sandbox Code Playgroud)
你好.这似乎是一个简单的问题,但我在互联网上找不到答案:为什么编译器不会使用init方法?我只想为不同类型提供不同的方法.
而是打印以下错误消息:"'CustomClass.init(bool)'的最佳重载方法匹配'有一些无效的参数"
我很乐意提示.
最好的问候,克里斯
我刚才在comp.std.c ++上问了这个问题并没有回复.
我只想在那里引用我的帖子,几乎没有修改.
标准布局类9/6的最后一个要求是必要的还是有用的?
提供了脚注说明:
这可确保具有相同类类型且属于同一最派生对象的两个子对象不在同一地址(5.10)分配.
单独看,脚注是不正确的.具有公共基类的两个空基类可以在同一地址处生成基类的两个实例.
struct A {};
struct B : A {};
struct C : A {};
struct D : B, C {};
D d;
static_cast<A*>(static_cast<B*>(&d))
== static_cast<A*>(static_cast<C*>(&d)); // allowed per 1.8/5
Run Code Online (Sandbox Code Playgroud)
在5.10的上下文中,子对象仅在指向成员的指针的比较要求中提及.基础子对象无关紧要.此外,对于指向成员子对象的(标量)指针和指向基础子对象之间的指针之间的比较,在基本子对象的指针之间进行比较之间进行比较是没有意义的.
在C++ 03中没有这样的限制.即使有一个ABI需要每个成员分配在同一类型的任何基地的不同地址,但已经允许对上述代码进行空基类优化,我认为ABI是错误的,标准应该是抓住这个.
语言可以追溯到N2172 ,这表明多重继承可能会导致麻烦,需要在标准布局类中禁止它以确保ABI兼容性 ; 然而,这最终是允许的,并且从那个角度来看,这个要求没有意义.
供参考,1.8/5-6:
5除非它是一个位域(9.6),否则一个派生最多的对象应具有非零大小,并且应占用一个或多个存储字节.基类子对象可以具有零大小.平凡可复制或标准布局类型(3.9)的对象应占用连续的存储字节.
6除非对象是零字段或零大小的基类子对象,否则该对象的地址是它占用的第一个字节的地址.两个不同的对象既不是位字段也不是零大小的基类子对象应具有不同的地址.
(脚注)在"as-if"规则下,如果程序无法观察到差异,则允许实现在同一机器地址存储两个对象,或者根本不存储对象.
10.1/8指的是5.10中相同的神秘内容,但它也只是一个信息性的注释.
[注意:......基类子对象的大小可以为零(第9条); 但是,必须不在同一地址(5.10)分配具有相同类类型且属于同一最多派生对象的两个子对象. - 结束说明]
GCC似乎保证给相同类型的空基子对象赋予唯一的地址.示例程序和输出.这似乎足以保证给定类型的对象由地址唯一标识.这将超出C++对象模型§1.8的保证范围.当然这是个好主意,但标准似乎并不需要.同样,平台ABI可以将此保证扩展到一个类,其中第一个成员别名为空基.该语言规定了ABI的最低要求; ABI可以添加语言功能,其他ABI也可以效仿,标准的追赶过程只是容易出错.
我的问题是给定的要求是否在标准的上下文中完成了任何事情,而不是它是否对用户与其他ABI保证一致有用.有证据表明这种独特地址保证是有意的,并且只是偶然遗漏,这也使得这一要求更有意义.
总结答案(或我的结论,无论如何):
该要求在理论上并不能确保任何事情,因为无论如何都可以确保给定类型的所有对象具有不同的地址.当空基类子对象的地址与另一个对象(另一个基础或成员)冲突时,编译器可以简单地在结构中为其分配任意位置.由于标准布局规则仅描述数据成员的位置(可能是继承的),因此空基的位置仍未指定,并且可能在类似的标准布局类之间不兼容.(就我所注意到的那样,非空基地的位置仍然没有说明,然而在这种情况下,"第一个成员"的意思并不清楚,但在任何情况下它们都必须一致.)
在实践中,该要求允许实现继续使用现有的ABI,只要它们包括空基类优化即可.当违反要求时,现有编译器可以禁用EBO,以避免基址的地址与第一个成员的地址一致.如果标准没有以这种方式限制程序,则必须使用更新的C++ 0x编译器重新编译库和程序......不值得!
我想知道是否有一种方法来确定某个范围的数组元素是否为空.例如,如果使用值为""的10个元素初始化数组,那么如果数据稍后被分配给元素5,7,9; 我可以测试元素0-3是否为空,或者是否包含空字符串""?
怎么了?有人可以解释一下这里发生了什么,我在紧密循环中改变了:
## j=i
## while j < ls - 1 and len(wordlist[j]) > lc: j+=1
j = next(j for j in range(i,ls) if len(wordlist[j]) <= lc)
Run Code Online (Sandbox Code Playgroud)
评论的版本运行整个程序:625毫秒,下一个生成器版本在2.125秒的时间内运行整个程序.
有什么理由可以说这个更加pythonic的版本会导致性能上的这种灾难?
编辑:也许它是由使用psyco模块引起的?当然至少没有psyco的Python 2.7的运行时间对于下一个版本来说是2.141,意味着与使用psyco的Python 2.6几乎相同.
删除*.pyc文件后,我得到的代码没有减速.然后,当我从库模块中删除了psyco的导入时,我还得到了2.6时序,没有psyco使用,非psyco版本和psyco版本的结果(现在库例程也慢了,它的时间也相关:)
不是psyco:
Psyco是:
在带有2GB RAM的WindowsXP AMD Sempron 3100+系统中运行.使用两个全局变量计算循环和调用:
j=i
callcount += 1
while j < ls - 1 and len(wordlist[j]) > lc:
j+=1
loopcount += 1
Run Code Online (Sandbox Code Playgroud)
使用psyco进行测试输入的结果:
Finished in 625 ms
Loopcount: 78317 …Run Code Online (Sandbox Code Playgroud) 我希望使用HTML Bridge将当前ObservableCollection中的数据发送到某些JavaScript.我假设这个数据需要在一个数组中,而不是在ObservableCollection中,因为它可以在JavaScript中使用.注意:此假设可能不正确.
Silverlight似乎没有在其ObservableCollection类上使用ToArray()函数,所以我想知道是否有更好的方法将其转换为数组而不是迭代整个事物.
我正在组织一个雪碧,有两个问题.
我一直想知道是否有可能将背景图片正面或底部负面定位.负面的位置是元素或顶部左侧的面包和黄油的东西,但右边和底部呢?
如果我有一个500像素×500像素的div,那么我可以将背景图像的左边缘定位为从右边看5px,使用比495px更负的值来推动它吗?
第二个问题是我是否只能使用一小部分图像并重复它而不显示其余图像.
例如,我可能有一个300px正方形的精灵,并充满了各种各样的东西.是否可以拍摄该图像的50px平方部分并在元素的背景中重复它?
我非常怀疑要么是可能的,但必须让猴子入睡!
搜索查询是:
"product1 prod2 prod4"
我需要制作mysql
SELECT *
FROM tableprod
WHERE (prod LIKE '%product1%'
AND prod LIKE '%prod2%'
AND prod LIKE '%prod4%')
Run Code Online (Sandbox Code Playgroud)
使用mysql_real_escape_string进行输入查询...
我有一个程序在一个JTextArea中获取带有文件路径的输入字符串,然后将其内容加载到第二个JTextArea.问题是当使用JTextArea时,我无法添加一个actionListener,它将在离开此字段时在第二个JTextArea中加载内容.如何解决这个问题?
protected JTextArea inputField, outputField;
public Main(){
super(new BorderLayout());
inputField = new JTextArea(5, 20);
outputField = new JTextArea(2, 20);
//inputField.addActionListener(this);
inputField.setEditable(false);
JScrollPane scroller2 = new JScrollPane(inputField);
JScrollPane scroller1 = new JScrollPane(outputField);
this.add(scroller1, BorderLayout.WEST);
this.add(scroller2, BorderLayout.EAST);
}
public void actionPerformed(ActionEvent evt) {
String text = inputField.getText();
(loading contents of file)
}
Run Code Online (Sandbox Code Playgroud) 我想在CentOS 5.5机器上安装和使用libpcap的最新版本(1.1.1).我通过以下方式配置,编译和安装了新的libpcap库:
[dima@localhost libpcap-1.1.1]$ ./configure
[dima@localhost libpcap-1.1.1]$ make
[dima@localhost libpcap-1.1.1]$ sudo make install
Run Code Online (Sandbox Code Playgroud)
但是当我尝试链接libpcap共享库(使用-lpcap链接器标志)时,我的应用程序链接到旧版本的libpcap库(使用pcap_lib_version()API调用验证).
我需要做什么才能链接到新的libpcap库?
提前致谢
c# ×3
algorithm ×1
arrays ×1
c++ ×1
c++11 ×1
collision ×1
css ×1
css-sprites ×1
game-physics ×1
generator ×1
generics ×1
geometry ×1
java ×1
javascript ×1
jtextarea ×1
libpcap ×1
linker ×1
linux ×1
mysql ×1
optimization ×1
pcap ×1
performance ×1
php ×1
python ×1
silverlight ×1
struct ×1
swing ×1
while-loop ×1