小编Jas*_*son的帖子

Draw()20,000 32乘32纹理或1大纹理20,000次

我正在使用.NET Framework 4在C#中编程,并且旨在使用XNA创建基于磁贴的游戏.我有一个大的纹理(256像素乘4096像素).请记住,这是一个基于图块的游戏,因此这个纹理非常庞大,因为它包含许多图块,每个图块都是32像素×32像素.我认为专家肯定会知道基于磁贴的游戏是什么样的.方向是正交的(如棋盘),而不是等距的.

在Game.Draw()方法中,我有两个选择,其中一个将比另一个更高效.

选择/方法#1:

半伪代码:

    public void Draw()
    {
        // map tiles are drawn left-to-right, top-to-bottom
        for (int x = 0; x < mapWidth; x++)
        {
            for (int y = 0; y < mapHeight; y++)
            {
                SpriteBatch.Draw(
                    MyLargeTexture, // One large 256 x 4096 texture
                    new Rectangle(x, y, 32, 32), // Destination rectangle - ignore this, its ok
                    new Rectangle(x, y, 32, 32), // Notice the source rectangle 'cuts out' 32 by 32 squares from the texture corresponding to …
Run Code Online (Sandbox Code Playgroud)

.net c# xna xna-4.0

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

为联网应用程序设计帮助?

注意

这是一个相当大的问题,所以请耐心等待,如果不清楚我会提前道歉.为了使这个问题易于管理,并尽量减少混淆,我省略了复制和粘贴类的一些属性.

CONTEXT

我正在编写一个联网应用程序 - 一种"远程桌面"应用程序,以便普通技术人员可以帮助他的朋友或邻居解决计算机问题.我意识到像TeamViewer这样的免费和更高级的软件存在,但这个问题并没有讨论创建这个软件的实用性.

共同条款

客户端是技术人员的书呆子,助手-的控制器.该服务器是"受害者",一遇险.该客户端通常是启动命令服务器之一.

信息

该软件不仅仅是实时查看/控制应用程序.我想要额外的模块,例如文件浏览器模块聊天模块(因此他们可以在不需要使用额外的即时消息软件的情况下进行通信).

最初,我通过UDP发送和接收消息的方法是手动且低效的.(我使用Lidgren库进行UDP网络连接,这就是为什么我的数据包不显示低级字节,如标题消息大小.)

Original Packet Structure:

Byte Index    Type      Purpose/Description
------------------------------------------------------
0             byte      The intended destination module (e.g. 1 -> Chat module)
1             byte      The command for this module to perform (e.g. 0 -> NewChatMessage)
2             byte      Encryption/compression flag
3             byte      Packet priority flag (e.g. Cancel packets should be processed first)
4-X            ?        Command-specific …
Run Code Online (Sandbox Code Playgroud)

.net c# design-patterns casting

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

(简单构造函数概念)为什么不Foo(); 做任何事情?

这是一个简单的C++构造函数概念,我遇到了麻烦.

鉴于此代码段:

#include <iostream>
using namespace std;

class Foo 
{
public:
    Foo ()      {       cout << "Foo()"  << endl;     }
    ~Foo ()     {       cout << "~Foo()" << endl;     }
};

int main()
{
    Foo f1;
    Foo f2();
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Foo()
~Foo()
Run Code Online (Sandbox Code Playgroud)

好像Foo f2();什么也没做.什么 Foo f2();为什么没有做任何事情?

c++ constructor copy-constructor default-constructor

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

如何绘制Windows和一般Windows桌面?

我问这个问题是因为我可能在几周内研究它,但我希望这里的某些人知识渊博并能指导我.

我的问题源于试图制作远程桌面软件(仅仅是为了好玩)的几年挑战.起初我发送了整个桌面的简单PNG.然后我终于进入镜像驱动程序捕获(DemoForge的DFMirage镜像驱动程序),这是超级快速的.但它绝对不够快.我试图通过将图像分成16个16个图块来实现缓存,这将是很多重复,我只需要发送哈希,但它通常只是一种迟滞和消失.

我还有另一个涉及API挂钩的项目.我正在这个其他项目中挂钩Direct3D.从C#开始,这意味着使用像EasyHook这样的挂钩库,因为C#是一种托管语言.我想知道是否可以将其应用于我的远程桌面项目.

问题:是否可以,如果可能,我可以将gdi32.dll挂钩以将所有桌面绘图重定向到我的应用程序?

但是等等,不要跳到回答,因为我的问题本身可能不正确.

当然,我的最终目标是将屏幕从一台计算机有效地转移到另一台计算机.现在,VNC和大多数远程桌面产品通过将屏幕转换为图像来工作.作为像素数据.虽然这非常灵活,但它肯定会尽可能慢.

所以我的猜测是gdi32.dll绘制了你在桌面上看到的所有东西.它是否正确?我认为我错了,因为DWM aero似乎使用更先进的东西.那么在桌面上绘制所有东西是什么呢?窗户是如何绘制的?

我的想法是,如果我可以拦截所有绘图功能,那么我可以超越像素级别,变得像Windows远程桌面,我发送绘图命令而不是实际像素.

如果我完全不对劲,那么远程桌面如何"知道"如何发送这些原始绘图命令?文档说远程桌面有一个"底层渲染引擎",可以"理解"屏幕上的内容作为这些原始绘图命令,但我怎么能得到它呢

我正在寻找一个答案,可以在这个图形级别上给我一个关于Windows内部的更大视角,以及如何实现我的目标的方向(如果它甚至是现实的).

windows hook vnc remote-desktop

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

数组中的不同类型,如何在将它们从数组中取出时知道将它们转换为什么?

假设类型为Packet的通用List,包含扩展Packet的自定义类,例如LoginPacketChatPacket.

假设我将这些放在列表中.当我拿出它们时,每个最"特定"的类型是Packet.我想将它们转换为更具体的类型,然后回到它们原来的LoginPacketChatPacket,或者回到原来的类型.

问题:我该怎么办?

参考:如何在运行时以编程方式转换对象?

所以...似乎这些自定义类共享一个公共接口,它会解决转换问题吗?但如果是这样,我的类不能共享一个接口.我需要在类的接口和类上构建接口.那么......我该怎么做?对不起,如果这个问题不那么准确.不知道如何表达我的确切问题.

.net c# network-programming casting

4
推荐指数
1
解决办法
73
查看次数

适合这个问题的设计/设计模式?

我以前发过这个,但我觉得它太冗长和无关紧要了.我的问题是也喜欢这样.第二个链接中的一张海报说答案(为什么你不能做下面的代码)是一个设计问题,特别是"继承的坏用法".所以我想再次与StackOverflow的专家一起检查这个问题,看看这是否真的是"糟糕的继承"问题 - 但更重要的是,如何修复设计.

就像海报一样,我也对Factory方法以及如何应用它感到困惑.似乎工厂方法适用于具有与抽象基类完全相同的实现的多个具体类,并且不添加它们自己的属性.但是,正如您将在下面看到的,我的具体类构建在抽象基类之上并添加额外的属性.

我们建立的基类:

public abstract class FlatScreenTV
{
     public string Size { get; set; }
     public string ScreenType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

扩展类示例:

public class PhillipsFlatScreenTV : FlatScreenTV
{
     // Specific to Phillips TVs. Controls the backlight intensity of the LCD screen.
     public double BackLightIntensity { get; set; }
}

public class SamsungFlatScreenTV : FlatScreenTV
{
     // Specific to Samsung TVs. …
Run Code Online (Sandbox Code Playgroud)

.net c# inheritance design-patterns

4
推荐指数
1
解决办法
907
查看次数

搜索数百万个文件名的最佳数据结构?

可能重复:
为子字符串搜索构建索引?

我正在开发一个文件名搜索工具.我想搜索一个硬盘(或多个硬盘),也许是数百万个文件名.

给定文件: application 3 - jack smithinson

搜索:

  1. ' application',' 3',' jack',' smithinson'
  2. ' smith'
  3. ' inson'

应该都返回此文件.

这种操作的最佳数据结构是什么?为什么?

  1. 二叉树.
  2. 特里.
  3. SQLite数据库,文件名
  4. 更多?

.net c# algorithm search data-structures

4
推荐指数
1
解决办法
665
查看次数

.NET Remoting,为什么不是一个可远程列表?

我正在使用RemotingServices.MarshalActivator.GetObject在两台位于同一台计算机上的简单程序之间建立远程通道.

public class IpcInterface : MarshalByRefObject
{
    public int number = -1;
    public string text = "default";
    public List<String> strings;
}
// A simplification
Run Code Online (Sandbox Code Playgroud)

我已经确认通道存在并且可以进行通信,因为两个程序都成功更改number并且text完全唯一的值(已确认).

所以我立即尝试做同样的事情strings.

在一个节目中,我打电话给strings.Add("1").我试着阅读strings第二个程序的内容.它是空的.更重要的是,伯爵是0.我不知道为什么strings继续有0对象,好像我从来没有添加它们.同样的事情发生了Stack<T>Dictionary<T, K>,我只是不能将任何元素添加到它.为了确保通常没有引用奇怪的引用类型,我还尝试StringBuilder在IPC接口类中放置一个,并且在两个程序中成功维护"状态"以更改其值.

问题:为什么不添加字符串列表,解决方案是什么?

我希望有经验的人能马上发现这个问题.我尝试使用谷歌搜索类似的问题,但我没有得到任何有用的结果.令人惊讶的是,我只有一个很好的链接谷歌搜索" 调试.net远程透明代理 ".这也是我的第二个问题.如何调试透明代理对象?

  1. 所有对象都被正确实例化(没有NullReferenceException;事实上,没有例外).

.net c# remoting binaryformatter

4
推荐指数
1
解决办法
1578
查看次数

在MongoEngine中链接查询

我正在为标准CRUD应用程序实现REST API.在一个示例中,要获取用户列表,客户可以调用:

GET api.site.com/users (和可选的) ?name=x phone=x email=x

传递上述可选参数可过滤我搜索的用户.

我正在尝试在Python中实现这个逻辑.我正在考虑链接子查询,如下所示:

鉴于:

users = User.objects()

然后:

if 'name' in request.args:
    users = users.objects(name = request.args['name'])
Run Code Online (Sandbox Code Playgroud)

和:

# List of users is smaller after filtering by name
if 'phone' in request.args:
    users = users.objects(phone = request.args['phone'])
Run Code Online (Sandbox Code Playgroud)

和:

# List of users is smaller after filtering by phone
if 'email' in request.args:
    users = users.objects(email = request.args['email'])
Run Code Online (Sandbox Code Playgroud)

但是该方法不可用,我无法通过检查MongoEngine API参考或用户指南或教程来了解如何执行此操作.

如何在MongoEngine中链接子查询?

python rest mongodb mongoengine flask

4
推荐指数
1
解决办法
590
查看次数