在过去的两天里,我一直在努力争取两个SKSpriteNodes注册冲突并唤起他们didBegin#contact.
我为两个对象设置了位掩码' categoryBitMask',' contactTestBitMask'和' collisionTestBitMask'.
我也设置' dynamic'属性为' true'
initPhysics() 似乎建立了physicsWorld好.
我所期待的didBegin#Contact就是所谓的,但事实并非如此
//Set up Physicsbody bit masks
let playerCarBitMask: UInt32 = 0x1 << 1
let slowCarBitMask: UInt32 = 0x1 << 2
//initPhysics
func initPhysics() {
println("(((((((((((((( Initiating Physicsbody ))))))))))))))")
self.physicsWorld.contactDelegate = self
self.physicsWorld.gravity = CGVector.zeroVector
println("self.physicsWorld.contactDelegate = \(self.physicsWorld.contactDelegate)")
}
//setupPlayer
func setupPlayer() {
car = SKSpriteNode(imageNamed: "redCarUp")
car.setScale(2.0)
car.position = CGPoint(x: 800, y: 400)
car.zPosition = 100
car.name = "car"
gameNode.addChild(car)
let …Run Code Online (Sandbox Code Playgroud) collision-detection sprite-kit skphysicsbody skphysicsworld swift
重要提示:这个问题与"PhysX" 完全没有关系,"PhysX"是一个计算机游戏物理系统(对于街机游戏中的物理学有用,如球类游戏等); PhysX是Unity3D和其他游戏引擎内置的系统; PhysX在这里完全无关紧要.
////////////////////更新(先读到底部)/////////////////////
我一直在记录值并搜索确切问题的位置,我想我找到了它.我的代码中有这样的东西
Velocity += Acceleration * Time.deltaTime;
position += Velocity * Time.deltaTime;
Run Code Online (Sandbox Code Playgroud)
加速度就像0,0000000000000009 ..现在.当代码流动时,速度应该增加,浮动没有问题.但是在开始时,地球的初始位置是(0,0,23500f)你可以在我最后给出的图表中看到这一点.
那么现在当我将速度*timedelta(此时类似于0,00000000000000005)添加到23500的位置时,它基本上不会添加它.位置仍然是(0,0,23500)不像(0,0,23500.00000000000005),因此地球不移动,因此加速度不会改变.
如果我将地球的初始位置设置为0,0,0并且仍然将加速度设置为0.0000000000000000009以使其位置为(0,0,23500)然后"ADDS"速度*timedelta.它变得类似于(0,0,000000000000000000005)并且继续增加.当float为0时,添加这么小的值没有问题.但是如果浮点数类似于23500,那么它就不会增加小值.
我不知道这是完全统一的问题还是c#的漂浮.
这就是为什么我不能让它与小值一起工作.如果我能克服这一点,我的问题将得到解决.
////////////////////////////////////////////////// /////////////////////////////
我一直在开发n体植物以模拟我们的太阳系,因此我一直在收集数据以使其尽可能逼真.但是数据大小存在问题.我搜索了每一点互联网,我找不到人们如何克服这一点的单一解释.(如果是这样的话)所以我在这里尝试拍摄.
因此,为了保持行星之间的距离,半径和"质量"的比例,我创建了一个excel文件来计算所有数据.(因为有人为什么会把"地球的质量如果有"那个"半径图"在互联网上?)我将把ss作为附件.它基本上"标准化"或换句话说"缩放"行星的每个属性到给定的参考.在这种情况下,我把参考作为"地球的半径".
我团结一致,你知道,你不能在统一中使用"太大"或"太小"的价值观.所以我不得不缩小太阳能系统,"很多!"
因此,我使用牛顿万有引力定律,即F = GMm/r ^ 2,使其变得简单,我直接计算a = GM/r ^ 2,对于来自所有其他物体的给定物体.
因此,地球的"朝向太阳"的重力加速度的实际值大约是0,000006 km/s ^ 2,这在统一的工作中甚至是非常小的值,但它可以工作.然而,为了获得这个值,1我需要将地球的半径(比例)设置为6371单位,并将太阳比例设置为696,342 !,这对于将其统一起来来说太大了.
所以我说,让地球的半径为1,以统一为单位.因此,当半径改变时,一切都会改变,质量,距离......我保持行星的密度,并用新半径计算新体积的质量.所有计算都在附件中.
所以事实是,当我把地球的半径变为1时,对太阳的引力加速就像0,0000000000009那样小得可笑.当然,Unity不会使用这个值.
所以,如果我改变地球的半径,那么太阳的质量和半径变得非常大,然后再次,我无法使用它.
我不知道其他人如何解决这个问题,他们为解决这个问题做了什么,但正如我从这里看到的那样,看起来不可能对太阳系进行逼真的n体模拟.(至少统一)
所以我需要有10个代表来发布图片-_-,我会给出链接. http://berkaydursun.com/solar_system_simulator/data.PNG 另外一个目录是使用n体计算但具有UNREALISTIC值的工作实验太阳系模拟.它工作得很好,它甚至看起来有点接近真实,但不,它没有正确的比率^^你可以在这里测试它,如果你希望http://berkaydursun.com/solar_system_simulator/
编辑:WoW我几乎用"So"开始了每个段落^^
我找到了一个xml文件GoogleDependencyFlurryPlugin.xml
<dependencies>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-base</artifactId><version>8.4+</version></dependency>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-basement</artifactId><version>8.4+</version></dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
确实是一个xml文件GoogleDependencyPlayGameServicesPlugin.xml
<dependencies>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-games</artifactId><version>8.4+</version></dependency>
<dependency><groupId>com.google.android.gms</groupId><artifactId>play-services-plus</artifactId><version>8.4+</version></dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
现在,前一个文件只有一个点
这似乎造成了一个巨大的问题.AndroidJavaException:java.lang.NoSuchMethodError:一旦在设备上运行.
Android专家,如果你有"基地",你必须有 "地下室"......或者反之亦然?
事实上,WRT游戏服务 - 游戏或游戏服务 - 加上,或许其中一个/两个在某种程度上(或相反?)基地/地下室?
想想Canvas你可能拥有的任何Unity.UI .
想象一下PanelCanvas上的一个典型.说它恰好包含一些图像,也许是一些文本等等.
如果您可以将该面板(仅面板)转换为屏幕截图:Texture2D或PNG,将会非常方便.
我唯一能想到的就是在屏幕上使用ReadPixels和搞清楚问题的区域Panel(实际上这非常棘手); 并且仅当面板恰好是正方形而不是以一定角度旋转时才有效.
您认为,应该有一种方法来渲染一个Panel,或者至少一个整个画布?我一无所获.
在示例中,将粉红色面板设为PNG图像.哎哟.
(显然,如果有人的解决方案仅仅是"整个画布",而不是一个小组,当然即使这是令人钦佩的.)
对于你目前正在进行的任何项目,简单地说
在任何屏幕上放下UIView
只需添加一个宽度约束(666或其他任何好的),
将约束的自定义类更改为 Constrainty
运行应用程序,
这怎么可能?
它是否实际上要求常量的值,"在类初始化之前",还是其他一些?
怎么会发生,怎么解决?
起初,我有两个变量@IBInspectable,我很惊讶,根本没有工作.但后来我将它们改为普通的常量 - 这不起作用!
class Constrainty: NSLayoutConstraint {
let percentageWidth: CGFloat = 77 // nothing up my sleeve
let limitWidth: CGFloat = 350
override var constant: CGFloat {
get { return teste() }
set { super.constant = newValue }
}
func teste()->CGFloat {
print("\n\n HERE WE GO \(percentageWidth) \(limitWidth) \n\n")
if let sw = (firstItem as? UIView)?.superview?.bounds.width {
let w = sw * ( percentageWidth / 100.0 )
let r …Run Code Online (Sandbox Code Playgroud) 这是一个真正的谜.
想象一下,您正在进行在屏幕外绘制复杂图像的传统过程(CGLayer),并且您在绘制时间歇性地将图像更新到屏幕上.
如您所知,执行此操作的方法是:在后台运行大型绘图过程,并根据需要调用setNeedsDisplays的前景,从而更新图像.这是微不足道的,可以通过两行代码实现.
但是,当你这样做时,会出现一个神秘的问题:每个绘图周期所花费的时间,每次都会增加,变得无法使用.此外,时间可能不规律地变化.
这是一个已知的iOS错误,还是?谁看过这个吗?
这是一个非常简单,非常容易理解的应用程序,可以解决问题:
http://www.fileswap.com/dl/p8lU3gAi/stepwiseDrawingV2.zip.html
输出示例如下.
有谁知道为什么会这样?操作系统的行为非常奇怪.
后来 ...... FELZ已经找到了令人震惊的解决方案.Felz副本的CGLayer一次每一轮.这完全阻止了这种奇怪的行为.
然而,对于究竟发生了什么仍然没有真正清楚的理解:因此从字面上看,当奇怪的问题出现时,时间在哪里?
这是一个很长的输出示例......
请注意,您有时会得到一个"双重奇异"的结果,如下所示:它表现出"正常"奇怪的行为:每次都会增加时间.然而,偶尔会有几轮时间"非常快",然后返回.怪啊?此外,如果您在模拟器上运行,请快速单击Mac上不相关的应用程序,以获得"更奇怪"的结果.
尽管费尔兹给出了一个完美的工作答案,但实际的机制仍然是一个谜.
:26:56.697 stepwiseDrawing[5334:1a03] time difference was 0
:26:56.707 stepwiseDrawing[5334:1a03] time difference was 10
:26:56.717 stepwiseDrawing[5334:1a03] time difference was 10
:26:56.744 stepwiseDrawing[5334:1a03] time difference was 27
:26:56.771 stepwiseDrawing[5334:1a03] time difference was 27
:26:56.807 stepwiseDrawing[5334:1a03] time difference was 37
:26:56.829 stepwiseDrawing[5334:1a03] time difference was 22
:26:56.864 stepwiseDrawing[5334:1a03] time difference was 35
:26:56.891 stepwiseDrawing[5334:1a03] time difference was 28
:26:56.936 stepwiseDrawing[5334:1a03] time difference was 45 …Run Code Online (Sandbox Code Playgroud) 我一直在想,你能用你用GCD推出的线程取消/ cancelAllOperations/.isCancelled吗?
目前,我只使用布尔值作为标志来取消后台进程.
假设您希望在后台进行大量处理,同时保持UI响应,以便您可以捕获取消按钮(或动画显示处理器工作的动画).这是我们如何做到的......
@interface AstoundingView : UIView
{
BOOL pleaseAbandonYourEfforts;
blah
}
@implementation AstoundingView
//
// these are the foreground routines...
// begin, abandon and all-done
//
-(void)userHasClickedToBuildASpaceship
{
[YourUIStateMachine buildShip];
[self procedurallyBuildEnormousSpaceship];
}
-(void)userHasClickedToAbandonBuildingTheSpaceship
{
[YourUIStateMachine inbetween];
pleaseAbandonYourEfforts = false; // that's it!
}
-(void)attentionBGIsAllDone
{
// you get here when the process finishes, whether by completion
// or if we have asked it to cancel itself.
[self typically setNeedsDisplay, etc];
[YourUIStateMachine nothinghappening];
}
//
// these are …Run Code Online (Sandbox Code Playgroud) iphone multithreading nsoperation grand-central-dispatch ios
Unity 优秀的Sprites(Unity 优秀的新精灵),除了其他有价值的优势之外,实际上是双面的。
在 2D 或 3D 用例中,您可以翻转这些小混蛋,仍然可以从后面看到它们——它们是从两侧渲染的。
我也喜欢它们上使用的 unlit 着色器(即 Sprite-Default,而不是 Sprite-Diffuse)。
但是,我需要一个老式的单面Sprite.
幸运的是,您可以免费下载 Unity 使用的优秀着色器的源代码......令人困惑的是,您不能只是在编辑器中打开它,而是在这里和那里查看。
在涉及廉价威士忌的大量持续努力之后,我对着色器进行了两 (2) 次修改。
我将文件第一行中的名称更改为“DefaultSingle”而不是“Default”
我评论了这条线 Cull Off
(然后我制作了一个新的Material,称为“Sprite Single Sided”,将着色器设置为这个新的,然后Sprite我用新材质替换了材质槽。)
事实上,我是否通过进行此修改来搞砸着色器中的任何内容?一个人可以愉快地注释掉“Cull off”而不引起进一步的问题吗?改变使用的常用材料是否有一些问题Sprite(您无法“看到”它,所以我不知道)。更广泛地说,有没有更正确的方法来实现单面Sprite?
// file "Sprites-DefaultSingle.shader"
Shader "Sprites/DefaultSingle"
{
Properties
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
}
SubShader
{ …Run Code Online (Sandbox Code Playgroud) 想象一个高大的薄视图L(比方说,它看起来像一个梯子).
说它高100,我们将它设置为屏幕的全高.所以,在伪代码..
func expandLadder() {
view.layoutIfNeeded()
UIView.animate(withDuration: 4 ...
ladderTopToTopOfScreenConstraint = 0
ladderBottomToBottomOfScreenConstraint = 0
view.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)
没问题.现在说我们沿着这些线在layoutSubviews中绘制梯子.
@IBDesignable class LadderView: UIView {
override func layoutSubviews() {
super.layoutSubviews()
setup()
}
func setup() {
heightNow = frame size height
print("I've recalculated the height!")
shapeLayer ...
topPoint = (0, 0)
bottomPoint = (0, heightNow)
p.addLines(between: [topPoint, bottomPoint])
shapeLayer!.path = p
shapeLayer add a CABasicAnimation or whatever
layer.addSublayer(shapeLayer!)
}
Run Code Online (Sandbox Code Playgroud)
没问题.
所以我们只是制作一个填充视图高度"heightNow"的线p.
问题当然是,当你这样做时......
func expandLadder() {
view.layoutIfNeeded()
UIView.animate(withDuration: 4 ...
ladderToTopOfScreenConstraint = 0
ladderBottomOfScreenConstraint …Run Code Online (Sandbox Code Playgroud) ios ×4
iphone ×2
swift ×2
aar ×1
android ×1
animation ×1
cocoa ×1
drawrect ×1
game-physics ×1
maven ×1
nsoperation ×1
physics ×1
png ×1
prime31 ×1
shader ×1
simulation ×1
sprite-kit ×1
unity3d-ui ×1
xcode ×1