- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的英雄角色遇到了一个问题,当他降落在一个移动的平台上时,他并没有跟着它一起移动,而是站在同一个 X 位置上,直到平台移出屏幕。我搜索了很多答案都无济于事。
这是我的英雄角色和移动平台的方法。
-(void)HeroAdd
{
_Hero = [SKSpriteNode spriteNodeWithImageNamed:@"Hero-1"];
_Hero.name = @"Daniel";
_Hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_Hero.size];
_Hero.physicsBody.categoryBitMask = fPlayerCategory;
_Hero.physicsBody.contactTestBitMask = fPlatformCategory | fEnemyCategory;
_Hero.physicsBody.usesPreciseCollisionDetection = YES;
_Hero.physicsBody.affectedByGravity = YES;
_Hero.physicsBody.dynamic = YES;
_Hero.physicsBody.friction = .9;
_Hero.physicsBody.restitution = 0;
_Hero.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
_Hero.position = CGPointMake(_Hero.position.x - 252, _Hero.position.y + 50);
if (self.size.width == 480) {
_Hero.position = CGPointMake(_Hero.position.x + 44, _Hero.position.y);
}
[self addChild:_Hero];
}
我的搬家平台代码
-(void)createPlatform {
SKTexture *objectTexture;
switch (arc4random_uniform(2)) {
case (0):
objectTexture = [SKTexture textureWithImageNamed:@"shortPlatform"];
break;
case (1):
objectTexture = [SKTexture textureWithImageNamed:@"highPlatform"];
default:
break;
}
SKSpriteNode *variaPlatform = [SKSpriteNode spriteNodeWithTexture:objectTexture];
variaPlatform.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
variaPlatform.position = CGPointMake(variaPlatform.position.x + 500, variaPlatform.position.y - 140);
variaPlatform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:variaPlatform.size];
variaPlatform.physicsBody.usesPreciseCollisionDetection = YES;
variaPlatform.physicsBody.categoryBitMask = fPlatformCategory;
variaPlatform.physicsBody.contactTestBitMask = fPlatformCategory |fPlayerCategory | fEnemyCategory;
variaPlatform.physicsBody.dynamic = NO;
variaPlatform.physicsBody.affectedByGravity = NO;
SKAction *moveLeft = [SKAction moveTo:CGPointMake(180, variaPlatform.position.y) duration:3];
SKAction *moveDown = [SKAction moveTo:CGPointMake(180, -700) duration:4];
SKAction *removeFromParent = [SKAction removeFromParent];
SKAction *AllThree = [SKAction sequence:@[moveLeft, moveDown, removeFromParent]];
[self addChild:variaPlatform];
[variaPlatform runAction:AllThree];
}
任何类型的信息都将不胜感激。
最佳答案
我在游戏中添加传送带时遇到了同样的问题。无论增加多少阻力,Sprite Kit 都不会拖动物体。您目前有 2 个选择。
选项 1 - 在平台的每一端添加一个壁架。这是最容易实现的,但不太优雅,而且如果玩家降落在窗台上,仍然可以滑下。
选项 2 -
第 1 步:添加使播放器与水平移动平台同步移动的代码。您可以使用 self.physicsBody.velocity = CGVectorMake(-50, self.physicsBody.velocity.dy);
或使用 self.position = CGPointMake(self.position.x+ 10、self.position.y);
.您将不得不使用 x 值来将它们同步到平台的速度。
第 2 步:每当玩家与平台接触时激活上述代码,并在失去接触时停用。
第3步:如果平台改变方向,设置左右限位,当平台改变方向时,通过联系方式通知您。根据平台的方向,您可以为玩家应用 +x 或 -x 移动值。
我知道这个选项听起来很复杂,但事实并非如此。你只需要一步一步来。
* 编辑以提供示例代码 *
这是水平移动平台背后的逻辑:
平台如果您有超过 1 个水平移动平台,则需要将它们存储在 GameScene(我的关卡)中的数组中。我已经为他们创建了自己的类(class),但您不必这样做。
您必须设置左右限制(带触点的不可见 SKNode)来为平台设置 BOOL 属性,该属性告诉播放器类以哪种方式插入,因为每个平台的长度可能不同。这就是为什么您需要保留对每个平台的引用(因此是数组)。
玩家当玩家在平台上跳跃时,将 Player 类属性 BOOL 设置为 TRUE,这会根据平台当前移动的方向激活持续的向左或向右插入。另一方面,失去联系会取消推送。
// This code in my "Levels class" which is the default GameScene class.
- (void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CategoryPlatformHorizontal | CategoryPlayer))
{
[_player setPlatformHorizontalContact:true];
for(Platform *platformObject in platformArray)
{
if(([platformObject.name isEqualToString:contact.bodyB.node.name]) || ([platformObject.name isEqualToString:contact.bodyA.node.name]))
{
_player.currentPlatform = platformObject;
}
}
}
}
- (void)didEndContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CategoryPlatformHorizontal | CategoryPlayer))
{
[_player setPlatformHorizontalContact:false];
}
}
// This code is in Player.h
@property (strong) Platform *currentPlatform;
@property BOOL platformHorizontalContact;
// This code is in Player.m
- (void)update:(NSTimeInterval)currentTime
{
if(self.platformHorizontalContact == true)
{
if(self.currentPlatform.movingLeft == true)
{
self.physicsBody.velocity = CGVectorMake(-75, self.physicsBody.velocity.dy); // set your own value depending on your platform speed
} else {
self.physicsBody.velocity = CGVectorMake(75, self.physicsBody.velocity.dy); // set your own value depending on your platform speed
}
}
}
关于ios - 如何让我的角色 "ride"与移动平台一起移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24995219/
robotframework是一个框架,是一个可以用于关键字测试驱动的框架。而ride(robotframework-ride)就是可以使得写robot测试用例更加方便快捷的ide图形操作工具。
Python2.7已于2020年1月1日开始停用,之前RF做自动化都是基于Python2的版本。 没办法,跟随时代的脚步,我们也不得不升级以应用新的控件与功能。 升级麻烦,直接全新安装。 1
当我从 RIDE 运行测试用例时,报告保存在以下路径中。 C:\Windows\Temp\RIDExf4xla.d 我想在特定路径中保存报告。我可以从 RIDE 执行此操作吗?是否有任何设置可以更改报
附件是Base58编码的,但是ride中唯一的Base58解码方式要求输入为字符串。如何将字节向量转换为字符串?当帐户脚本正在处理交易时,它会看到以 Base58 编码发送的附件是真实附件还是真实附件
我在解决 USACO 培训页面上的第一个问题时遇到了麻烦。 该任务要求从 ride.in 文件中获取两个字符串,将字符串转换为字母乘积的数字(其中 a=1、b=2、z=26 ),然后查看数字的余数是否
我创建了多个套件,例如“StarterKit Registration”、“White SIM Registration”、“Add VAS”等,我想通过 RIDE 一起运行所有这些套件,并且我想按我
当我有几个测试用例时,为我生成输出文件夹文件:为了测试,我使用 robotframework 和 pycharm log.html output.xml report.xml 每次测试后,文件都会被覆
我想使用 RobotFramework IDE 运行测试并在我的机器上查看执行日志,但在远程机器上执行实际测试,最好不要重写测试套件(或最少重写)。我看到它的方式是某种模式或设置,您在计算机上运行 I
我的右侧栏不在顶部。 例如,这是两个页面。 www.cafecartel.com 和 www.cafecartel.com.index2.php 目前网站的写法,右边栏必须这样放: body id="
我的机器人框架脚本中的一些库/资源是红色的,如下所示: bad script with red marks 而另一个(我从中复制的)看起来还不错: good script 我的工作环境(树)是这样的:
我喜欢玩 Ticket to Ride ,所以我决定尝试用 Python 实现部分游戏逻辑,作为一个辅助编程项目。游戏板本质上是一个加权多重图,因此用 NetworkX 复制了游戏的基本结构。小菜一碟
我想使用伪元素在链接后添加链接的 href,但不保留父元素的文本装饰。下面的代码显示了具有不同文本修饰的“a”和“a:after”。 a { text-decoration: none; color:
我的英雄角色遇到了一个问题,当他降落在一个移动的平台上时,他并没有跟着它一起移动,而是站在同一个 X 位置上,直到平台移出屏幕。我搜索了很多答案都无济于事。 这是我的英雄角色和移动平台的方法。 -(v
对于RIDE(Robot framework)的自动化测试,我已经安装了PYTHON 2.6和wxPython 3.0版本,环境变量中的PATH已经更新,当我跳到最后一个阶段即安装RIDE(versi
我想使用 RIDE 连接到 MySQL 数据库。 我已经下载了 DatabaseLibrary和MySQL。我需要从 MySQL 执行查询以进行验证。 如何使用 RIDE 连接到 MySQL? 最佳答
当从我的应用程序点击按钮时,是否可以更改旅行模式谷歌地图以在 Android 上请求乘车选项卡? 我用过: Intent intent = new Intent(Intent.ACTION_VIEW,
我正在使用 Robotframework - SikuliLibrary 进行 Windows 应用程序测试。一切都已正确安装。从 RIDE 我按照 _ 的方式导入 SikuliLibrary 图书馆
我在自动化测试用例时遇到问题,所以我的问题是我需要在下一个测试用例中像输入一样使用输出测试用例值...我找不到解决方案,有人有想法吗?? 最佳答案 Robot Framework guide在 var
我正在为 iOS 应用程序使用 Uber-SDK。在过去的几天里,我可以使用 ridesClient.fetchCheapestProduct() 获得最便宜的产品。但今天,该函数总是返回一个 nil
我在一个网站上工作,我使用嵌入了 youtube 视频的 wordpress 插件。 现在它有一个很棒的选项,可以仅显示视频图像并仅在您按下视频时加载视频,这样页面加载时间就不会太长。 问题是,在那种
我是一名优秀的程序员,十分优秀!