我目前在碰撞语句中有这个代码,如果与对象发生碰撞,那么这个粒子会发生,但我该怎么做呢?因为它永远持续下去,而我只希望每次接触发生几次
SKEmitterNode *emitter = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"ff" ofType:@"sks"]];
emitter.zPosition = 0;
emitter.particlePositionRange = CGVectorMake(0, self.size.height);
emitter.position = CGPointMake(self.size.width, self.size.height/2);
[self addChild:emitter];
Run Code Online (Sandbox Code Playgroud) 我注意到NSHomeDirectory每次使用Xcode重新启动App时返回不同的路径,显然即使我手动点击图标,因为它没有加载文件的内容.每次重新启动应用程序时,我都惊呆了它给了我一个不同的目录.这发生在模拟器和设备上,即使我使用"ForUser"方法.我的电话看起来像这样:
NSString* fullPath = [NSHomeDirectory() stringByAppendingPathComponent:@"test.file"];
Run Code Online (Sandbox Code Playgroud)
要么
NSString* fullPath = [NSHomeDirectoryForUser(@"MrX") stringByAppendingPathComponent:@"test.file"];
Run Code Online (Sandbox Code Playgroud)
甚至
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [docsDirectory stringByAppendingPathComponent:@"test.file"];
Run Code Online (Sandbox Code Playgroud)
两个应用程序启动的日志如下所示,请注意GUID部分的更改方式:
loadCharacters: /var/mobile/Applications/ABE7E33E-439B-4258-8FC1-127A3CD00D87/test.file
loadCharacters: /var/mobile/Applications/71C02507-6347-4693-8CC1-537BE223179E/test.file
Run Code Online (Sandbox Code Playgroud)
我做错了什么,或者我错过了什么?
解:
起初我保存到NSHomeDirectory本身,而不是"Documents"子目录.由于App目录随每次部署而变化,但只复制了"Documents"目录中的文件,因此每次部署后保存的文件都会丢失.然后我使用了"Documents"文件夹,但是有人建议我应该把它放在"Documents"的子文件夹中,我只是这样做但是忘了创建文件夹,因此文件没有保存.我在这一次双重失败.:)
只需保存到NSHomeDirectory()+"Documents/test.file"即可.
我正在使用Box2D(C++)并创建一个Objective-C对象并将其分配给Box2D正文的userData属性,该属性属于类型void*.
现在在某些情况下,它void* userData可能是该ObjC对象的唯一活动引用.因此,因为我(__bridge void*)在作业中使用过,所以ARC正在放手.这是我需要解决的问题.
我一直在思考防止这种情况发生的选择吗?我阅读了Clang的ARC文档,特别是关于桥梁铸造的部分(以及关于SO的Q&A)以及对他们认为"形成不良"的各种桥梁铸造结构的点头.
不过,我的第一个想法是(__bridge_retained void*)在初始分配给userData时使用.但这让我想知道如何平衡保留?我显然无法向对象发送释放.
那么我必须要CFRelease()对象吗?还是需要CFBridgingRelease()?或者在这里都是非法的?
是否(__bridge_transfer void*)从userData一个临时id类型转换为足够的,也许在之后将userData设置为NULL?这是一个好主意吗?
我所知道的替代办法是保留独立NSArray/ NSDictionary为userData对象,让他们在与Box2D的身体的寿命同步,添加和同步与他们的Box2D的身体移除它们.
但这感觉就像矫枉过正,因为在这里我知道我在做什么,我知道+1只要Box2D主体处于活动状态-1就需要对象,并且当Box2D主体被移除时我需要对象.另外我知道只有两种方法可以添加和删除Box2D主体,并且userData在我的框架中甚至无法直接访问,因为所有Box2D对象都隐藏在Objective-C接口/包装器后面.
暂时搁置"不良形式",你会建议我在这种情况下做什么?
所以基本上在我的游戏中我需要抛掷或抛出一个物体.到目前为止,我有一个精灵,它可以被拖动,但它不能被抛出.游戏的想法是抛出一个精灵与另一个精灵碰撞.我想要我们将调用testNode的精灵,移动用户抛出它的方式
意思是,当我释放精灵时,我希望它继续向我移动它的方向.我花了很多年时间试图解决这个问题,但我不能.我正在使用适用于iOS 8+的SpriteKit.如果有人可以提供帮助请.
这是我看过的视频,但它与GameSalad有关,这是另一个故事.你可以看看
(如果您需要进一步联系,请回复)
import Foundation;
import SpriteKit;
class Level:SKScene {
TestNode:Test? //Test is a class I made
//Removed the update and touches began due to it being irrelevant to what I need help with.
override func didMoveToView(view: SKView){
testNode = Fruit(imageNamed: "apple_idle")
testNode?.position = CGPointMake(60, 294)
testNode?.xScale = 0.5
testNode?.yScale = 0.5
self.addChild(testNode!)
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
var nodeTouched = SKNode()
var currentNodeTouched = SKNode()
for touch: AnyObject in touches {
let …Run Code Online (Sandbox Code Playgroud) 我想知道我应该走哪条路ParticleSystem.在这个特殊情况下,我想同时创建1-20个小爆炸,但位置不同.现在我正在ParticleSystem为每次爆炸创造一个新的,然后释放它,但当然这对性能非常不利.
我的问题是:有没有办法创建一个ParticleSystem具有多个发射源的方法.如果不是,我应该ParticleSystem在init中创建一个数组,然后在需要爆炸时使用一个免费的数组?还是有另一种我没有想过的方法?
如何在Sprite-Kit中更改Sprite的z顺序?
Cocos2d代码:
[parentNode addChild:sprite1 z:3];
[parentNode addChild:sprite2 z:2];
[parentNode addChild:sprite3 z:1];
Run Code Online (Sandbox Code Playgroud)
我在Sprite-Kit中尝试了下面的代码.但它没有改变z顺序
[parentNode insertChild:sprite1 atIndex:3];
[parentNode insertChild:sprite2 atIndex:2];
Run Code Online (Sandbox Code Playgroud) 
您好,我正在使用Unity 4.6测试版的新UI系统...
尝试了不同的代码,查看了文档并搜索了但却找不到答案......
例如.我有一个图像,我想在运行时更改宽度和高度.
public GameObject image4;
image4.GetComponent<RectTransform>().rect.Set(0,0,100, 300);
Run Code Online (Sandbox Code Playgroud)
这不起作用.而image4.GetComponent().rect.y只是GET,因此无法在运行时更改.
我也尝试过:
image4.transform.localScale.y = 15;
Run Code Online (Sandbox Code Playgroud)
这也不起作用.
什么是在运行时更改大小的正确方法?你可以用JS或C#给我一个例子,没关系.
我想用GKLocalPlayer和saveGameData方法保存游戏数据.
[localPlayer saveGameData:playerData withName:@"SolarFlares" completionHandler:^(GKSavedGame *savedGame, NSError *error) {
if (savedGame != nil) {
NSLog(@"Player data saved to GameCenter");
}else{
NSLog(@"Player=%@ data NOT saved to GameCenter, error=%@", localPlayer, error.description);
}
}];
Run Code Online (Sandbox Code Playgroud)
上面的代码在xcode模拟器上工作正常,但是当我在我的iPhone上尝试它时,我得到如下所示的错误代码.我无法弄清楚这一点.我无法控制它保存游戏数据的位置,那么为什么系统会尝试将其保存在没有权限的地方!?!
Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn’t be completed. (Cocoa error 513.)" UserInfo=0x171661f80
{NSFileOriginalItemLocationKey=file:///private/var/.DocumentRevisions-V100/PerUID/501/e4/com.apple.ubiquity/iCloud~com~MJinc~SolarFlares_A3695FA3-6BFA-4862-B53A-F01E192726CC_1a.bundle/,
NSURL=file:///private/var/.DocumentRevisions-V100/PerUID/501/e4/com.apple.ubiquity/iCloud~com~MJinc~SolarFlares_A3695FA3-6BFA-4862-B53A-F01E192726CC_1a.bundle/,
NSFileNewItemLocationKey=file:///private/var/mobile/Containers/Data/Application/EF8BC999-1D4B-42B2-B8D9-0B0A79543C03/tmp/(A%20Document%20Being%20Saved%20By%20Solar%20Flares)/iCloud~com~MJinc~SolarFla
res_A3695FA3-6BFA-4862-B53A-F01E192726CC_1a.bundle, NSUnderlyingError=0x170c48b50 "The
operation couldn’t be completed. Permission denied"}
Run Code Online (Sandbox Code Playgroud)
// Micke ...
在我的cocos2d游戏中,我有我的玩家精灵,我希望让他朝我倾斜iPhone的方向移动.我可以解决这个问题,我无法解决的最困难的是:
如何让我的精灵旋转指向我倾斜的方向?这在应用程序商店的"Tilt to Live"游戏中得到了很好的体现.我想要像这样的控件.
我的精灵(对于那些不熟悉cocos2d的人)确实有旋转值,如果有帮助的话.
谢谢.
我正在使用COCOS2d Framework和Objective-C开发iPhone游戏(在横向模式/视图中).
对于游戏,我使用的是具有四层的背景(顶部为"天空",天空下方为"山",山下为"山",下方为"前景'极端).在这里,我需要以不同的速度移动背景的每一层,比如'Sky'应该比Mountain慢,'Mountain'应该比Hill慢,而'Hill'应该比前景慢.
当我以不同的速度移动每一层时,游戏在层的协调之间经历了突破.
我尝试用以下逻辑解决这个问题:根据它的速度增加图像/图层(宽度)大小,以便每一层都应该结束并开始协调再次运行.无法让它工作.
这是我移动背景的代码:
-(void) backgroundmoving
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
//return kDevice_iPad;
// Code for Each Layer's Moving Speed FOR iPad
bk_f -=1.0;
bk_f1 -=1.4;
bk_f2 -=1.8;
bk_f3 -=2.2;
} else {
// Code for Each Layer's Moving Speed FOR iPhone
bk_f -=0.2;
bk_f1 -=0.4;
bk_f2 -=0.6;
bk_f3 -=0.8;
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
//return kDevice_iPad;
if (bk_f <= -920*1.1) {bk_f=0;}
if (bk_f1 <= -920*1.1) {bk_f1=0;}
if (bk_f2 <= -920*1.1) {bk_f2=0;}
if (bk_f3 <= -920*1.1) …Run Code Online (Sandbox Code Playgroud) objective-c ×5
sprite-kit ×3
ios ×2
iphone ×2
casting ×1
game-center ×1
gamekit ×1
optimization ×1
particles ×1
rotation ×1
swift ×1