作为我之前关于显示锚点的问题的后续问题,我将 CCSprite子类化并更改其绘制方法如下:
[super draw];
ccDrawColor4F(0, 1, 0, 1);
ccDrawCircle(self.anchorPointInPoints, 20, 0, 8, YES);
Run Code Online (Sandbox Code Playgroud)
这非常有效.为了额外的功劳,我添加了以下内容来显示其边界框:
CGRect bb = self.boundingBox;
CGPoint vertices[4] = {
[self convertToNodeSpace:ccp(bb.origin.x, bb.origin.y)],
[self convertToNodeSpace:ccp(bb.origin.x + bb.size.width, bb.origin.y)],
[self convertToNodeSpace:ccp(bb.origin.x + bb.size.width, bb.origin.y + bb.size.height)],
[self convertToNodeSpace:ccp(bb.origin.x, bb.origin.y + bb.size.height)],
};
ccDrawPoly(vertices, 4, YES);
Run Code Online (Sandbox Code Playgroud)
这也很有用,直到我重新表达一个精灵:
CGPoint oldPosition = [sprite convertToWorldSpace:sprite.position];
[sprite removeFromParentAndCleanup:NO];
[parentSprite addChild:sprite];
sprite.position = [sprite convertToNodeSpace:oldPosition];
Run Code Online (Sandbox Code Playgroud)
精灵现在处于正确的位置,它的锚点在它应该的位置绘制,但是边界框在错误的位置绘制.我究竟做错了什么?
在没有意识到这一点的情况下,我已经使用密码学包好几个月了,没有出现问题,但突然间它无法构建并且导致我的项目的开发停止。
事实证明,密码学是我的 Pipfile: 中其他包之一的依赖项apns2。正如我所说,它运行良好,但我的环境中肯定发生了一些变化。这是我的 Pipfile,只隔离了那个包:
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[requires]
python_version = "3.7.9"
[packages]
apns2 = "*"
[dev-packages]
Run Code Online (Sandbox Code Playgroud)
这失败了。我使用pipenv(最新版本 2020.11.15),所以当我现在运行它时,这是输出:
# pipenv install
Creating a virtualenv for this project...
Pipfile: /Users/dylan/Dev/RideHare/server/Pipfile
Using /Users/dylan/.pyenv/versions/3.7.9/bin/python3.7m (3.7.9) to create virtualenv...
? Creating virtual environment...created virtual environment CPython3.7.9.final.0-64 in 502ms
creator CPython3Posix(dest=/Users/dylan/.local/share/virtualenvs/server-2uc2X-TS, clear=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/dylan/Library/Application Support/virtualenv)
added seed packages: pip==20.2.2, setuptools==51.0.0, wheel==0.35.1
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
? Successfully created virtual …Run Code Online (Sandbox Code Playgroud) 自从我升级到Xcode 11和Swift 5.1以来,我遇到了一个奇怪的问题-实例化了一个可选变量后,它在Xcode调试器中仍然显示为nil!
我有一个可选的类变量,称为booking:
var booking: Booking?
Run Code Online (Sandbox Code Playgroud)
类型Booking:
public struct Booking: Codable {
var id: Int?
var start_time: Date?
var payment_currency: String = "USD"
var payment_amount: Int?
}
Run Code Online (Sandbox Code Playgroud)
当我单步执行代码时,可以booking在分配代码之前看到它……这太好了:
然后在分配之后...什么,还是零??:
我想知道是否以某种方式将其视为惰性变量。但这并不是零,因为可以访问它:
搜索了一会儿之后,我想知道我在Xcode中的构建模式是否没有设置其“调试可执行文件”标志。但是确实如此。我什至清理并重新构建了该项目,并确定了该标志。
无论booking是在变量视图中查看还是p booking在控制台视图中输入,它都显示为nil。
这里发生了什么?我需要在升级之前调试的可预测性。
更新
我总结了一种重现此问题的简单方法。首先,创建一个空的单视图项目并将其添加到AppDelegate.swift的顶部:
public struct Booking: Codable {
var start_time: Date?
var payment_currency: String = "USD"
}
Run Code Online (Sandbox Code Playgroud)
然后将这些行添加到应用程序(_:didFinishLaunchingWithOptions :) func:
booking = Booking()
print("booking.payment_currency = \(booking?.payment_currency ?? "NULL")")
Run Code Online (Sandbox Code Playgroud)
如之前和在运行时一样设置断点,请注意,即使在分配调试器后,调试器也将预订显示为nil,就像我原来的情况一样。
然后注释掉的start_time变量,重新运行,并注意现在调试器显示booking被分配有后的值,正如人们所期望的那样。
因此,看起来像这样的结构中的Date变量(可选或不可选)使调试变得混乱。特别是Date变量-将变量更改为其他类型,例如Int,Int?,String,String?...,没有问题。 …
我试图控制CCSprites一个接一个地分层的顺序.我会使用zOrder,但是我正在制作由明确的精灵组成的角色(一些精灵在其他精灵addChild身上)和zOrder只在兄弟精灵中受到尊重.
基本上,我想让我的精灵成为父母,以便他们可以继承彼此的变换,但我想确定绘制顺序.
环顾四周,听起来像使用CCSprite的vertexZ属性是要走的路.我试过了.我设置我的自定义CCSprite的draw方法,如下所示:
- (void)draw
{
glEnable(GL_BLEND);
CHECK_GL_ERROR_DEBUG();
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
CHECK_GL_ERROR_DEBUG();
[super draw];
glDisable(GL_BLEND);
}
Run Code Online (Sandbox Code Playgroud)
我的每个精灵现在都有一个0的zOrder和一个独特的vertexZ来按照我的意愿对它们进行分层,但它不起作用:任何有父级的精灵都不会显示!
尝试一些事情,我发现如果我没有设置vertexZ,则会显示所有精灵.如果我保留顶点并且不是父节点,它们都会显示出来.但是设置了vertexZs后,任何子精灵都不会显示.
这里发生了什么,我怎样才能让它发挥作用?
更新: 更多线索.我可以完全围绕我对[super draw]的调用来评论GL函数,结果是一样的.此外,它显示了具有vertexZ do显示的子精灵,但是只要它们与任何其他精灵重叠,它们就会变得不可见.紫色纸精灵是该生物的左前臂精灵(在屏幕右侧)的孩子,但应该在它上面.

对于上图,我基本上是在我的CCLayer中这样做的.我想养育孩子,但我希望手和纸都在上面.
[self addChild:lUpperarm];
[self addChild:lForearm];
[self addChild:face];
[self addChild:rUpperarm];
[self addChild:rForearm];
[lForearm addChild:handAndPaper];
lUpperarm.vertexZ = -100;
lForearm.vertexZ = -99;
face.vertexZ = -98;
rUpperarm.vertexZ = -97;
rForearm.vertexZ = -96;
handAndPaper.vertexZ = -95;
Run Code Online (Sandbox Code Playgroud)
这就是我想要的样子.(我改变了[self addChild:handAndPaper]丢失lForearm转换的最后一行,而不是我想要的.)

更新2: 有人建议我将zOrder设置为-1的所有子项添加:例如[lForearm addChild:handAndPaper z:-1].这改变了一点,但仍然没有解决它,唉.似乎vertexZ不确定绘制顺序和/或混合是错误的.

我在我的Django应用程序中创建了一个自定义用户对象,但无法控制用户权限.我相信这是因为用户链接没有出现在Django管理站点的Auth部分,其中通常控制权限.

为什么不出现?
这是来自我的models.py文件:
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models
class UserManager(BaseUserManager):
def create_user(self, username, password=None):
"""
Creates and saves a user with the given username.
"""
user = self.model()
user.username = username
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, password):
"""
Creates and saves a superuser with the given username.
"""
user = self.create_user(username, password=password)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class FooUser(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=40, unique=True, db_index=True)
is_active …Run Code Online (Sandbox Code Playgroud) 我有点困惑.我想按照一定的顺序堆叠CALayers来绘制另一个,但我也希望从这些层带来的继承转换中受益.
想象一下身体,上臂,前臂和手.我想为手臂和手设置锚点和父母,这样我就可以旋转手臂,手就会跟随.
这是我做的:
CALayer *body = [CALayer layer];
body.path = @"body.png";
body.anchorPoint = ap1;
CALayer *arm = [CALayer layer];
arm.path = @"arm.png";
arm.anchorPoint = ap2;
CALayer *hand = [CALayer layer];
hand.path = @"hand.png";
hand.anchorPoint = ap3;
[myView.layer addSublayer:body];
[myView.layer addSublayer:arm];
[myView.layer addSublayer:hand];
hand.parent = arm;
arm.parent = body;
Run Code Online (Sandbox Code Playgroud)
一切都很好,但如果我希望身体与手臂和手重叠怎么办?有没有办法保持这个父母顺序,但覆盖绘图顺序?这样做的任何聪明的想法?