小编bfo*_*ops的帖子

如何在修改Tkinter Entry小部件时获取事件回调?

正如问题所说的那样.Text小部件有<<Modified>>事件,但Entry小部件似乎没有.

python tkinter

46
推荐指数
5
解决办法
5万
查看次数

更改Tkinter列表框选择时获取回调?

在Tkinter 中有多种方法可以获得回调Text或者Entry更改小部件,但是我没有找到一个用于回调的方法Listbox(我找不到的大部分事件文档是旧的还是不完整的).有没有办法为此生成一个事件?

python events tkinter

42
推荐指数
3
解决办法
4万
查看次数

用于2D碰撞检测的四叉树

我正在尝试使用四叉树进行二维碰撞检测,但我对如何实现它感到有点困惑.首先,我有一个四叉树,其中包含四个子树(一个代表每个象限),以及一个不适合单个子树的对象集合.

当检查对象在树中的碰撞时,我会做这样的事情(感谢QuadTree用于2D碰撞检测):

  1. 检查对象是否与当前节点中的任何对象发生冲突.
  2. 对于其空间与对象重叠的任何子树,递归.

要查找四叉树中的所有碰撞:

  1. 检查当前节点中的每个对象与当前节点中的每个其他对象.
  2. 根据每个子树检查当前节点中的每个对象.

要插入四叉树:

  1. 如果对象适合多个子树,则将其添加到当前节点,然后返回.
  2. 否则,递归到包含它的子树.

要更新四叉树:

  1. 递归到每个子树.
  2. 如果当前节点中的任何元素不再完全适合当前树,请将其移动到父节点.
  3. 如果当前节点中的任何元素适合子树,请将其插入子树中.

这好吗?可以改进吗?

quadtree collision game-physics data-structures

32
推荐指数
2
解决办法
3万
查看次数

如何在Rust中存储闭包?

我曾经有类似的东西:

struct Foo {
    pub foo: |usize| -> usize,
}
Run Code Online (Sandbox Code Playgroud)

现在闭包语法已经过时了.我可以这样做:

struct Foo<F: FnMut(usize) -> usize> {
    pub foo: F,
}
Run Code Online (Sandbox Code Playgroud)

但那么Foo我创建的对象的类型是什么?

let foo: Foo<???> = Foo { foo: |x| x + 1 };
Run Code Online (Sandbox Code Playgroud)

我也可以使用参考:

struct Foo<'a> {
    pub foo: &'a mut FnMut(usize) -> usize,
}
Run Code Online (Sandbox Code Playgroud)

但我觉得它的速度较慢,因为a)指针deref,以及b)现在对于FnMut实际最终被使用的类型没有专门化.

closures rust

25
推荐指数
2
解决办法
1万
查看次数

如何写出优雅的碰撞处理机制?

我有点傻瓜:说我正在做一个简单的,2D,塞尔达式的游戏.当两个对象发生碰撞时,每个对象都应该有一个结果.然而,当主角与某物碰撞时,他的反应完全取决于他碰撞的物体的类型.如果它是一个怪物,他应该反弹,如果它是一堵墙,没有什么应该发生,如果是用丝带一个神奇的蓝盒子,他应该愈合等(这些只是例子).

我还要指出,这两个东西是碰撞的一部分,也就是说,碰撞事件应该发生作无论在角色和怪物,而不仅仅是一方或另一方.

你会怎么写这样的代码?我能想到的一些令人难以置信的不雅的方式,例如,同样载有全球WorldObject类的虚函数,以确定属性 - 例如,一个GetObjectType()函数(返回整型,字符*S,任何标识对象为怪物,Box或Wall),然后在具有更多属性的类中,比如Monster,可能会有更多的虚函数,比如GetSpecies().

但是,这会使维护变得烦人,并导致冲突处理程序中的大型级联切换(或If)语句

MainCharacter::Handler(Object& obj)
{
   switch(obj.GetType())
   {
      case MONSTER:
         switch((*(Monster*)&obj)->GetSpecies())
         {
            case EVILSCARYDOG:
            ...
            ...
         }
      ...
   }

}
Run Code Online (Sandbox Code Playgroud)

还有使用文件的选项,文件将包含以下内容:

Object=Monster
Species=EvilScaryDog
Subspecies=Boss
Run Code Online (Sandbox Code Playgroud)

然后代码可以检索属性,而不需要虚拟函数混乱一切.但是,这并不能解决级联If问题.

再有就是具有每种情况下的功能的选项,说CollideWall(),CollideMonster(),CollideHealingThingy().这是我个人最不喜欢的(虽然它们都远非可爱),因为它似乎是最难以维护的.

请问有人可以深入了解这个问题的更优雅的解决方案吗?感谢您的帮助!

c++ collision

11
推荐指数
1
解决办法
4174
查看次数

什么时候在D中删除?

我用C++学习了8年的D语言.我的问题是关于D垃圾收集 - 我什么时候使用删除,什么时候不需要?

garbage-collection memory-management d

11
推荐指数
2
解决办法
980
查看次数

游戏碰撞处理

The code given is for example purposes, not copypasta from my codebase

我正在使用Boost和SDL用C++编写一个原始的,跨平台的Snake游戏,我想知道实现冲突处理的最佳方法是什么(不是碰撞检测).到目前为止,我一直在使用单一调度的想法,带有难看的意大利面条代码,如下所示:

void Snake::CollisionHandler(const WorldObject& obj)
{
    // collided with self
    if(obj.GetObjectType() == snake)
        Die();
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

另外,我有一个"全局"碰撞处理程序,它处理碰撞中涉及的事情,它们独立于每个对象,例如:


void GameWorld::CollisionHandler(WorldObject& obj1, WorldObject& obj2)
{
    if(obj1.GetObjectType() == snake && obj2.GetObjectType() == snake)
        PlayDeathSound();
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

避免像碰撞一样播放两次的声音.

我也考虑过双重调度,如下:


void Snake::CollisionHandler(WorldObject& obj) const
{
    // invoke obj's collision handler with a const Snake& parameter
    obj.CollisionHandler(*this);
}
// collided with self
void Snake::CollisionHandler(const Snake& obj)
{
    Die();
}

这还包括类似于上面的全局冲突处理程序.

然后就是只有 …

c++ collision-detection

9
推荐指数
1
解决办法
3367
查看次数

const是否有助于优化器?C++

可能重复:
C++中的常量和编译器优化

让神圣的战争开始:我听到了很多关于const在C++中的用处的不同观点.当然它在成员函数声明等中有用.但它作为变量(或更确切地说,常量)的修饰符有用吗?如果剩下的代码保持不变,它确实对优化器有帮助吗?

c++ const

8
推荐指数
3
解决办法
559
查看次数

如何在D2(Phobos)中进行单键击?

是否有一种简单的跨平台方式可以使用Phobos在D2中进行单次击键?

例如,"按任意键继续..."提示,或Brainfuck翻译.

我尝试过的所有方法都需要在传递输入之前输入Enter键(例如getchar()).

keyboard d input phobos

8
推荐指数
2
解决办法
711
查看次数

MSVC - 在标题中停止警告

我正在使用MSVC和一个CMaked项目.结果,我在MSVC上启用了许多为gcc和clang启用的标志.然而,/ Wall警告级别给了我一些痛苦; 它警告我包含标题中的所有类型的东西,比如stdio.h和boost标题.有没有办法阻止MSVC警告我标题中的内容?我喜欢我的警告级别,但我只想让它们为我启用.

c++ warnings visual-c++

7
推荐指数
1
解决办法
2179
查看次数