我正在使用.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) 注意
这是一个相当大的问题,所以请耐心等待,如果不清楚我会提前道歉.为了使这个问题易于管理,并尽量减少混淆,我省略了复制和粘贴类的一些属性.
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) 这是一个简单的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();
和为什么没有做任何事情?
我问这个问题是因为我可能会在几周内研究它,但我希望这里的某些人知识渊博并能指导我.
我的问题源于试图制作远程桌面软件(仅仅是为了好玩)的几年挑战.起初我发送了整个桌面的简单PNG.然后我终于进入镜像驱动程序捕获(DemoForge的DFMirage镜像驱动程序),这是超级快速的.但它绝对不够快.我试图通过将图像分成16个16个图块来实现缓存,这将是很多重复,我只需要发送哈希,但它通常只是一种迟滞和消失.
我还有另一个涉及API挂钩的项目.我正在这个其他项目中挂钩Direct3D.从C#开始,这意味着使用像EasyHook这样的挂钩库,因为C#是一种托管语言.我想知道是否可以将其应用于我的远程桌面项目.
问题:是否可以,如果可能,我可以将gdi32.dll挂钩以将所有桌面绘图重定向到我的应用程序?
但是等等,不要跳到回答,因为我的问题本身可能不正确.
当然,我的最终目标是将屏幕从一台计算机有效地转移到另一台计算机.现在,VNC和大多数远程桌面产品通过将屏幕转换为图像来工作.作为像素数据.虽然这非常灵活,但它肯定会尽可能慢.
所以我的猜测是gdi32.dll绘制了你在桌面上看到的所有东西.它是否正确?我认为我错了,因为DWM aero似乎使用更先进的东西.那么在桌面上绘制所有东西是什么呢?窗户是如何绘制的?
我的想法是,如果我可以拦截所有绘图功能,那么我可以超越像素级别,变得像Windows远程桌面,我发送绘图命令而不是实际像素.
如果我完全不对劲,那么远程桌面如何"知道"如何发送这些原始绘图命令?文档说远程桌面有一个"底层渲染引擎",可以"理解"屏幕上的内容作为这些原始绘图命令,但我怎么能得到它呢?
我正在寻找一个答案,可以在这个图形级别上给我一个关于Windows内部的更大视角,以及如何实现我的目标的方向(如果它甚至是现实的).
假设类型为Packet的通用List,包含扩展Packet的自定义类,例如LoginPacket或ChatPacket.
假设我将这些放在列表中.当我拿出它们时,每个最"特定"的类型是Packet.我想将它们转换为更具体的类型,然后回到它们原来的LoginPacket或ChatPacket,或者回到原来的类型.
问题:我该怎么办?
所以...似乎这些自定义类共享一个公共接口,它会解决转换问题吗?但如果是这样,我的类不能共享一个接口.我需要在类的接口和类上构建接口.那么......我该怎么做?对不起,如果这个问题不那么准确.不知道如何表达我的确切问题.
我以前发过这个,但我觉得它太冗长和无关紧要了.我的问题是也喜欢这样.第二个链接中的一张海报说答案(为什么你不能做下面的代码)是一个设计问题,特别是"继承的坏用法".所以我想再次与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) 可能重复:
为子字符串搜索构建索引?
我正在开发一个文件名搜索工具.我想搜索一个硬盘(或多个硬盘),也许是数百万个文件名.
给定文件: application 3 - jack smithinson
搜索:
application
',' 3
',' jack
',' smithinson
'smith
'inson
'应该都返回此文件.
这种操作的最佳数据结构是什么?为什么?
我正在使用RemotingServices.Marshal
并Activator.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远程透明代理 ".这也是我的第二个问题.如何调试透明代理对象?
我正在为标准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中链接子查询?