问题列表 - 第30875页

使用公共静态字段,良好的编程习惯/快速?

我正在用Java编写一个大型游戏,我正在尝试优化代码,但也要保持代码整洁有序.现在我不确定是否应该使用具有许多实例使用的几个变量的单个类的公共静态字段.

例如,类摄像机具有x和y位置,用于定义用户正在查看的地图的哪个部分以及需要绘制到屏幕的内容.目前我正在使用5万个单位进行基准测试,我有以下选项来绘制它们.

1:在每个单元中存储对摄像机实例的引用,并在绘制时调用getX()和getY():

public void paint()   
{   
   paint(x - camera.getX(), y - camera.getY());  
}  
Run Code Online (Sandbox Code Playgroud)

2:在绘制时,将摄像机的坐标作为每个单元的参数提供:

public void paint(int cameraX, int cameraY)  
{   
   paint(x - cameraX, y - cameraY);  
}
Run Code Online (Sandbox Code Playgroud)

3:使摄像机类的x和y变量保持静态:

public void paint()   
{   
   paint(x - Camera.x, y - Camera.y);  
}
Run Code Online (Sandbox Code Playgroud)

我感兴趣的是通常被视为最佳解决方案,如果它影响性能.也许有更多方法可以做到这一点我还没有想到呢?

谢谢!

java performance

5
推荐指数
1
解决办法
407
查看次数

为什么auto_ptr不支持op - >*()

auto_ptr(shared_ptr也是如此)尽量使它们尽可能透明; 也就是说,理想情况下,您不应该区分是否使用auto_ptr或指向对象的实际指针.考虑:

class MyClass
{
public:
    void foo() {  }
};

MyClass* p = new MyClass;
auto_ptr<MyClass> ap(new MyClassp);

p->foo();       // No notational difference in using real
ap->foo();      // pointers and auto_ptrs
Run Code Online (Sandbox Code Playgroud)

当您尝试通过指向成员的指针调用成员函数时,存在差异,因为auto_ptr显然不实现op - >*():

void (MyClass::*memfun)() = &MyClass::foo;

(p->*memfun)();         // OK
(ap->*memfun)();        // Error op->*() missing
(ap.get()->*memfun)();  // OK
Run Code Online (Sandbox Code Playgroud)

为什么auto_ptr中不支持op - >*()以及如何实现它(我已经实验了一段时间,但最终放弃了).

c++ operator-overloading pointer-to-member

17
推荐指数
2
解决办法
321
查看次数

为什么 Graphics::DrawImage 不能按预期拉伸图像?

我正在制作一个重载TableLayoutPanel,它绘制了一些花哨的边框,但由于某种原因,调用Graphics::DrawImage没有按预期工作。当我拉伸它时,它似乎淡出我的 1x10 像素源图像:

替代文字

这是进行渲染的函数:

void GTableLayoutPanel::RenderSides(Graphics^ g, array<Drawing::Image^>^ sideImages)
{
    if( sideImages )
    {
        if( sideImages->Length < 4 )
        {
            throw gcnew System::ArgumentException(String::Format("Not enough images supplied to render sides (expected 4 but only got {0})", sideImages->Length));
        }

        int borderSize = sideImages[0]->Height;
        g->DrawImage(sideImages[0], Rectangle(borderSize, 0, this->Width-borderSize*2, borderSize));
        g->DrawImage(sideImages[1], Rectangle(this->Width-borderSize, borderSize, borderSize, this->Height-borderSize*2));
        g->DrawImage(sideImages[2], Rectangle(borderSize, this->Height-borderSize, this->Width-borderSize*2, borderSize));
        g->DrawImage(sideImages[3], Rectangle(0, borderSize, borderSize, this->Height-borderSize*2));
    }
}
Run Code Online (Sandbox Code Playgroud)

.net windows c++-cli drawimage winforms

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

我应该为XML站点地图发送什么内容类型值?

我以为我应该发送"text/xml",但后来我读到我应该发送"application/xml".有关系吗?有人可以解释这个区别吗?

xml sitemap mime-types xml-sitemap

124
推荐指数
4
解决办法
12万
查看次数

在Windows上编译C#.net 3.5控制台应用程序有什么免费,小巧,快速的东西吗?

在Windows上编译C#.net 3.5控制台应用程序有什么免费,小巧,快速的东西吗?我想在家用eee pc上使用ffmpeg(使用tao框架)编写c#windows consol应用程序; 任何人都可以帮我吗?

.net c# compiler-construction

4
推荐指数
2
解决办法
2008
查看次数

可以从调试器停止并继续执行吗?

有没有办法从ctrl + c这样的调试器中停止执行matlab程序,但是能够继续执行(比如你可以说c#)?

如果没有,除了尝试在matlab代码中预先设置断点或dbstop语句之外,还有更好的解决方法吗?

我希望能够中断长时间运行的模拟以查看当前状态,然后继续模拟.

我目前使用/考虑的两个选项是

  1. 代码中的dbstop命令(或(条件)断点).缺点是有时候我不想停止模拟几个小时,有时候想要在几秒钟之后停止(我不一定知道提前知道)并且这对这种方法不起作用:如果我将中断条件设置为每5分钟中断一次,我就不能让matlab在没有交互的情况下运行数小时.如果我将条件设置得更高,我必须等待太久才能达到条件.

  2. 包括每隔几秒/几分钟保存工作空间的代码,并将工作空间导入第二个matlab实例.缺点是这是一个巨大的麻烦,也不一定允许我使用已保存工作空间的状态恢复模拟,然后逐步执行代码几次迭代.

我希望有比2中任何一个更好的解决方案.感谢任何建议!

编辑:我认为我要做的是编写简单的matlab函数,每次迭代检查环境变量或磁盘上的文件,如果我在此文件或env中设置了一个标志,则调用dbstop.通过这种方式,我可以通过编辑文件来控制断点从matlab外部命中的时间(如果需要的话).凌乱,但应该工作.

debugging matlab

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

如何将http:// localhost:8080映射到iis7中的http:// mysites?

基本上我希望能够输入http:// mysites并且它显示我的本地人而不是输入http:// localhost:8080 /

我打算做几次像http:// localhost:8181http:// mysites2

我以为你可以通过主机文件来做到这一点?

这都在我的机器上

iis iis-7 localhost

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

Lisp中的SQLITE用户定义函数

在SQLITE中,可以相对容易地在(扩展)语言(如C,Perl,Python等)中创建用户定义的函数和聚合.是否还有使用common-lisp作为SQLITE语言扩展的可能性?我知道有像cl-sqlite和plain-odbc这样的库,但它们似乎没有提供这种可能性.

lisp sqlite common-lisp

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

如何从字符串中获取数字?

我正在使用Java StreamTokenizer来提取字符串的各种单词和数字,但是遇到了一个问题,其中包含逗号的数字,例如10,567被读作10.0和567.

我还需要从可能出现的数字中删除所有非数字字符,例如$ 678.00应为678.00或-87应为87.

我相信这些可以通过whiteSpace和wordChars方法实现,但有没有人知道如何做到这一点?

目前基本的streamTokenizer代码是:

        BufferedReader br = new BufferedReader(new StringReader(text));
        StreamTokenizer st = new StreamTokenizer(br);
        st.parseNumbers();
        st.wordChars(44, 46); // ASCII comma, - , dot.
        st.wordChars(48, 57); // ASCII 0 - 9.
        st.wordChars(65, 90); // ASCII upper case A - Z.
        st.wordChars(97, 122); // ASCII lower case a - z.
        while (st.nextToken() != StreamTokenizer.TT_EOF) {
            if (st.ttype == StreamTokenizer.TT_WORD) {                    
                System.out.println("String: " + st.sval);
            }
            else if (st.ttype == StreamTokenizer.TT_NUMBER) {
                System.out.println("Number: " + st.nval);
            }
        }
        br.close(); 
Run Code Online (Sandbox Code Playgroud)

或者有人建议REGEXP来实现这一目标吗?我不确定REGEXP在这里是否有用,因为在从字符串中读取标记之后会发生任何parding. …

java string parsing numbers stringtokenizer

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

你能否为特定位置包含的任何标题关闭(特定)编译器警告?

我有一个第三方库,即使在/ W3下也会产生大量警告.有没有办法让我告诉编译器,"为此目录或其子目录中包含的任何文件禁用C4244"?当然,我不想在我们自己的代码库中禁用警告,也不想跟踪每个可能的包含并用它包装它#pragma warning(...

c++ visual-studio-2008 visual-studio

15
推荐指数
3
解决办法
8489
查看次数