- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Cocoa 中为 2-4 名玩家构建一个简单的游戏。这是我的第一个 Cocoa 应用程序,所以不熟悉这些库,我可能做了很多奇怪的事情。如果您发现有任何可以做得更好的地方,请直接说出来。
第一步要求用户从 NSPopUp 中选择玩家数量,并将该数据提取到 int 中。我创建了一个数组并在多个玩家对象中循环。
- (IBAction)startGame:(id)sender {
// Get value of playersPopup into a string
NSString *playersReturn = [[NSString alloc] initWithString:[playersPopup titleOfSelectedItem]];
// Convert that string to an int
numberOfPlayers = [playersReturn intValue];
// Create an array
playerArray = [[NSMutableArray alloc] init];
// Create a counter
int i = 0;
// While counter is less than number of players, create player object and add to array
while (i < numberOfPlayers) {
// Create a player object
Player *player = [[Player alloc] init];
// Add player to array
[playerArray addObject:player];
// Increment
i++;
}
}
这有点奇怪,因为所有对象都具有相同的名称。我不确定如何使用诸如player1等计数器以编程方式为对象赋予标题,但使用objectAtIndex从数组中按键提取它们很容易。这将是我的问题的第一部分:在 Cocoa 中,我如何使用计数器来命名对象?因为根据我收集的信息,如果我这样做了:
player *player[i] =
当我只想将其称为player1等时,它会创建该对象的数组。
第二个问题是:我有另一个 View ,在创建玩家对象后,用户会看到 NSTextFields 来输入玩家的名称。鉴于我应该在 AppDelegate 中声明 IBOutlet,我不确定如何提供 2-4 名玩家。我可以声明所有 4 个导出,然后只使用两个,然后以编程方式隐藏未使用的文本字段。但似乎应该有一种方法可以根据选择的玩家数量来创建导出并查看对象。我的意思是我有整个 AppDelegate 的 int,所以我应该以某种方式使用它。
如果有人不介意为我指明一个好的方向,那就太好了!我真的很喜欢用 Cocoa 编程,但现在已经是一个不同的世界了。我知道会有一个学习曲线,但它与 .net 确实不同!
谢谢大家!
-亚历克
最佳答案
It's a bit weird because all the objects have the same name. I'm not sure how to programmatically give the objects a title using the counter like player1, etc, but its easy enough to pull them by key from the array with objectAtIndex. That would be part 1 of my question: in Cocoa how do I use the counter in naming the objects?
你不知道。除了少数提供专门用于命名对象的API的类(例如NSThread)外,没有其他方法可以命名对象。
你所说的是声明变量,它保存指向对象的指针。这些变量与对象本身是分开的;你甚至可以有多个变量都指向同一个对象。命名变量不会影响它可能指向的对象的任何内容。
Because from what I gather if I did:
player *player[i] =
it would create arrays of that object when all I want to do is call it player1 etc.
不,它会声明一个名为 player
的变量来保存指向 player
对象的 i
指针的 C 数组。如果不是无效的话,它也会很麻烦,因为您将名称 player
用于两个不同的事物(一个类和一个指针变量)。
假设您如愿以偿,可以创建一堆名为 player0
、player1
、player2
等的变量。您会如何工作与他们所有人?更重要的是,您将如何与他们每个人合作?您如何为每个 View 赋予不同的播放器?您将如何将每个 View 布置到不同的位置?您将如何向需要更新的单个特定 View 发送消息?
问题的正确解决方案是第二个 NSMutableArray:这一个是 View 。将 View 放入该数组中,就像将模型对象放入玩家数组中一样。您可以维护数组,使每个索引引用一个数组中的模型对象和另一个数组中的相应 View ,因此,例如,如果您收到一条操作消息,您将在 View 数组,然后通过玩家数组中的索引获取模型对象以响应操作。
该解决方案的一个更强大的变体,但也需要更多的工作,是循环遍历 View 数组,搜索具有特定玩家的 View 。此解决方案不要求它们具有相同的顺序,并且使您能够处理玩家 View 从模型数组中丢失的(不应该发生的)情况。但是,正如我所说,这对您和程序来说都是更多的工作(即速度更慢)。我可能只会做并行数组。
I mean I have that int for the whole AppDelegate so I should use it somehow.
你不需要它。
一方面,这是错误的类型。 NSArray 的索引和计数的正确类型是 NSUInteger
。
更重要的是,一旦您添加了所有玩家,该数字就包含了玩家数量。您可以通过向玩家数组发送 count
消息来轻松获取该信息。如果您单独了解自己拥有多少玩家,则添加或删除玩家并忘记更新自己的计数变量可能会导致另一件错误。
删除该变量。当你需要知道你有多少玩家时,只需询问数组即可。
至于限制添加的玩家数量:将玩家数量复制到局部变量中,然后倒计时。当它达到零时,您就已经添加了所需的所有玩家。或者,您也可以删除它,首先添加两名玩家,然后让用户可以根据需要添加任意数量的其他玩家。
关于cocoa - 如何以编程方式创建 View 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938019/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!