我最近一直在阅读Joel on Software,所以在开始参与开发之前,我已经成功地编写了功能规范.
我即将创建一个简单的2D游戏(不是太简单的头脑),我真的能看到收益 - 过去我刚刚开始编写非常简单的游戏而且我发现自己陷入困境或者一遍又一遍地重写相同的位,因为我突然意识到我不知道应该如何定义我的水平,或者我意识到我希望能够跳跃,但这意味着完全重新思考我的碰撞检测.
无论如何,所以我已经开始提出一个功能规范,但我有点挣扎 - 我可以看到并理解它的重点,但我之前并没有写过很多功能规范,所以我真的不知道怎么开始 我在互联网上找到的例子很棒,但它们大多是基于流程的(用户提交表格A,然后表格B)等等......这对游戏结构并不太重要.
有没有人对如何制定/编写游戏规范有任何建议/示例?
作为一个学习练习,我正在使用IronPython编写一个简单的扩展/插件/宏框架 - 我已经掌握了基础知识,但我想添加一些基本的调试支持,以使我的脚本编辑器更易于使用.
我一直在互联网上搜索一下,我发现了一些编写托管调试器的好资源(包括Mike Stall的优秀.Net调试博客和CLR调试API上的MSDN文档) - 我知道IronPython是基本上是IL,但除此之外,我对如何开始有点迷失,特别是:
(我现在对制作调试器的GUI方面不感兴趣 - 我已经非常了解这可能如何工作)
在尝试将Debug安装集安装到测试计算机时,我今天第一次遇到了并排程序集.我最终管理了它,但留下了几个问题:
我需要将.pdf文件转换为.txt文件(或.doc,但我更喜欢.txt).
我怎么能在C#中做到这一点?
我想扩大我的编程经验,因此认为学习C(不是C++)会是一个好主意 - 我有一个启动项目(一些使用SDL的简单2D游戏)并给它一个去,但我不得不承认我我在苦苦挣扎.
现在我认为自己是一个非常称职的C#开发人员,但C只是一个完全不同的世界!
String课程的损失有点文化冲击.最重要的是,我发现从C信息中分离C++信息很棘手(例如snprintf只是C++的东西?)
这可能听起来像一个奇怪的请求,但如果你有其他语言的经验,有没有什么好的学习C指南?
我正在编写自己的"玩具"操作系统,目前我主要是在汇编(NASM)中进行操作 - 部分是因为我希望它能帮助我理解x86的反汇编,也因为我找到了它也很有趣!
这是我第一次使用汇编编程的经验 - 我的选择速度比我想象的要快,但是学习任何明显不同的语言我发现我的代码结构相当混乱,因为我试图找出哪些模式和约定我应该使用.
特别是目前我正在努力:
跟踪寄存器
目前一切都处于16位模式,因此我只有6个通用寄存器可供使用,其中可用于访问存储器的寄存器更少.我继续践踏我自己的寄存器,这反过来意味着我经常交换寄存器来避免这种情况 - 因此我很难跟踪哪些寄存器包含什么值,即使是自由评论.这是正常的吗?有什么我可以做的,以帮助使事情更容易跟踪?
例如,我开始使用被破坏的寄存器列表来评论我的所有函数:
; ================
; c_lba_chs
; Converts logical block addressing to Cylinder / Head / Selector
; ax (input, clobbered) - LBA
; ch (output) - Track number (cylinder)
; cl (output) - Sector number
; dh (output) - Head number
; ================
Run Code Online (Sandbox Code Playgroud)
跟踪堆栈
在一些情况下,当我用完寄存器时,我已经开始使用堆栈了,但这让事情变得更糟 - 任何比push call pop保存寄存器的简单序列更复杂的事情都会导致我完全失去轨道,使得它甚至变得棘手告诉我堆栈中是否有正确数量的项目(特别是涉及错误处理时 - 见下文),更不用说它们处于什么顺序.我知道必须有更好的方法来使用堆栈,我只是可以看不出它是什么.
处理错误
我一直在使用进位标志和零标志(取决于函数)来向调用者指示错误,例如:
myfn:
; Do things
jz .error
; Do more things
ret
.error:
stc
ret …Run Code Online (Sandbox Code Playgroud) 我正在尝试理解我在Internet Explorer 6和Windows XP下运行的JavaScript密集型瘦客户端应用程序中看到的间歇性脚本错误.问题的根本原因是以下函数调用返回一个null值(但是它确实成功而没有错误):
var doc = targetWindow.document.open("text/html","_replace");
Run Code Online (Sandbox Code Playgroud)
哪里targetWindow是一个窗口对象.
既不是targetWindow也不targetWindow.document是null,所以我很难理解为什么这个电话会回来null.我对文档的解释是这个方法不应该返回null.
这段代码已经没有改变并且工作了很多年 - 直到我理解为什么会发生这种情况我不确定我是如何处理这个问题的,或者可能已经改变了什么导致这种情况开始发生.
什么可能导致此函数调用返回null?
我正在实现自定义比较器,以便为各种视图中的项应用自定义排序顺序.
有些时候我发现我想维护现有的项目顺序,在这种情况下我应该从我的Compare方法实现返回什么?简单地返回0就足够了,还是我主动需要确定哪个项目首先出现?
在下面的简单WPF应用程序中,a TextBox设置为在焦点从该控件中丢失时更新属性,如下所示
<DockPanel>
<ToolBar DockPanel.Dock="Top">
<Button>Test</Button>
</ToolBar>
<TextBox Text="{Binding MyString}" />
</DockPanel>
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public string MyString
{
get { return _myString; }
set { _myString = value; }
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此应用程序时,在文本框中输入一些文本,然后单击"测试"按钮,我的MyString属性上的断点不会引发,也不会引发该FocusLost事件的任何事件处理程序.仅当通过某些其他方式(例如窗口关闭)从控件丢失焦点时才会引发这些事件.
这对我们造成了问题,因为实际上"测试"按钮包含依赖于MyString正在更新的属性的逻辑.
FocusLost当我单击"测试"按钮时,如何确保正确引发事件并更新绑定?看起来问题是由于使用而导致的问题ToolBar,因为用ToolBar标准按钮替换不会导致这种行为.
c# ×2
.net ×1
assemblies ×1
assembly ×1
c ×1
clr ×1
debugging ×1
focus ×1
icomparer ×1
ironpython ×1
javascript ×1
lost-focus ×1
nasm ×1
pdf ×1
side-by-side ×1
text-files ×1
toolbar ×1
wpf ×1
x86 ×1