我正在寻找在我的spriteKit游戏中为我的英雄收集物品的最好方法,并且在尝试了几种方法之后,我的结论是最好的方法是有物理身体的物品可以检测到碰撞,但不会与我的英雄发生碰撞.有可能吗?停用物理机构的碰撞而不停用其检测碰撞的能力?听起来有点矛盾我知道......因为,另一种方法是只创建一个没有物理体的SKSpriteNode,然后就不会发生碰撞,但是"检测"碰撞的方式将是手工制作的,而且要困难得多,因为我需要在我的英雄中设置坐标系检测,当他将在那些细节坐标(在项目上)时,我将使项目消失.如何更轻松地了解如何做到这两种方式中的任何一种?
我通过xib实例化一个商店:
let cShop = UINib(nibName: "connectedShop", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! connectedShop
Run Code Online (Sandbox Code Playgroud)
这家商店已经分配了这个定制类:
import Foundation
import UIKit
class connectedShop : UIView{
@IBOutlet weak var bannerViewHight: NSLayoutConstraint!
@IBOutlet weak var bannerViewTop: NSLayoutConstraint!
@IBOutlet weak var bannerViewLeft: NSLayoutConstraint!
@IBOutlet weak var bannerViewRight: NSLayoutConstraint!
@IBOutlet weak var banerDiscount: UIImageView!
@IBOutlet weak var bannerImageShop: UIImageView!
@IBOutlet weak var bannerTitle: UILabel!
@IBOutlet weak var bannerDescription: UILabel!
@IBOutlet weak var bannerButton: UIButton!
@IBAction func bannerButtonAction(sender: UIButton) {
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
} …Run Code Online (Sandbox Code Playgroud) 我已经添加了一个框架和一个库(弹簧)来执行带有按钮等的动画.现在没有一个应用程序图标可以启动,在x-code中,我有三个,并且可以启动它们除了主要的一个.主应用程序图标它现在是一个装备,我无法运行它,因为x代码不允许我选择任何设备来启动它.我只能选择我的mac,正如你在图片中看到的那样......
还有另外一件事.只有当我在主应用程序中时,产品文件夹中的yu.app才会变为红色.当我选择弹簧时,它会再次变黑.有谁知道如何解决这个问题?
大家好我是spriteKit和objective-c的新手,我想在方法中创建一个spriteNode并在另一个方法中删除它(相同的.m文件)在这个方法中我创建了一个精灵:
(void)createSceneContents{ /*in this method i create and add the spaceship spriteNode
SKSpriteNode *spaceship = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];
//code...
//Add Node
[self addChild:spaceship];
}
Run Code Online (Sandbox Code Playgroud)
现在我想删除触摸它的节点,但我只知道处理触摸事件的方法是:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)
我正试图从那里访问我的宇宙飞船节点我不能.我尝试了一切都没有成功.有没有办法将节点从一个方法发送到另一个?或者不发送它,是否可以从未声明的方法访问子节点?
我在spriteKit开始了一个平台游戏,我对横向模式有点问题.当我和我的英雄一起跳跃时,我会使用
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)
而当英雄它在空中并与墙壁或任何物体相撞并错过他的速度时,我就使用了
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint positionInScene = [touch locationInNode:self];
SKSpriteNode *touchedNode = (SKSpriteNode *)[self nodeAtPoint:positionInScene];
CGPoint posicionHero = [self.world childNodeWithName:@"hero"].position;
SKSpriteNode *touchHero = (SKSpriteNode *)[self nodeAtPoint:posicionhero];
//pragma mark -hero movement in the air
if ((touchedNode != touchHero)
&&
(positionInScene.x > [self.world childNodeWithName:@"hero"].position.x))
{
[[self.world childNodeWithName:@"hero"].physicsBody applyImpulse:CGVectorMake(5, 0)];
}
if ((touchedNode != touchHero)
&&
(positionInScene.x < [self.world childNodeWithName:@"hero"].position.x))
{
[[self.world childNodeWithName:@"hero"].physicsBody applyImpulse:CGVectorMake(-5, 0)];
}
}
Run Code Online (Sandbox Code Playgroud)
保持这种速度.我一直在纵向模式测试,一切都很好,但我的游戏是横向模式,所以最后我把游戏阻挡到横向模式,现在我在横向模式下测试它,我遇到了麻烦,因为当我在跳跃中向前移动手指时,没有任何反应.而不是这个,我必须向上移动我的手指,以获得这种运动.我确定我错过了横向模式的一些基本配置.任何帮助都会被贬低
当我在tableView Controller中填充新数据时,我的顶部单元格正在被底部单元格重写.让我解释.我有一个图像在底部的最新单元格行中加载异步.所有其他单元格都使用应用程序中的图像加载静态.当我向下滚动我的应用程序并显示与其他单元格图像不同的底部单元格时,我再次向上滚动,我看到第一个商店图像已更改为底部单元格中加载的动态图像.有谁知道为什么会这样?
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : shopsTableViewCell = tableView.dequeueReusableCellWithIdentifier("shopCell", forIndexPath: indexPath) as! shopsTableViewCell
cell.index = indexPath.row
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
let apiCall = webApi()
dispatch_async(backgroundQueue, {
apiCall.downloadPhotoAsync("http://api-ytyg.wbbdev.com/files/shops/\(shops[indexPath.row].id)/\(shops[indexPath.row].featured_img)"){(image: UIImage?) -> Void in
dispatch_async(dispatch_get_main_queue()){
if(image != nil){
if (cell.index == indexPath.row){
// shops[indexPath.row].photo = image!
cell.shopImg?.image = image
}
}else{
shops[indexPath.row].photo = UIImage.init(named: "No_Image_Available.jpg")!
}
}
}
})
cell.shopName?.text = shops[indexPath.row].name
cell.shopDescription?.text = shops[indexPath.row].address
cell.label1?.text = shops[indexPath.row].city + " …Run Code Online (Sandbox Code Playgroud) 我试图在游戏中控制角色的最大速度.当我移动他时我使用它:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint positionInScene = [touch locationInNode:self];
SKSpriteNode *touchedNode = (SKSpriteNode *)[self nodeAtPoint:positionInScene];
CGPoint posicionHero = [self childNodeWithName:@"hero"].position;
SKSpriteNode *touchHero = (SKSpriteNode *)[self nodeAtPoint:posicionHero];
if((touchedNode !=touchHero) //jump forward
&& (positionInScene.x > [self childNodeWithName:@"Hero"].position.x)
&& (positionInScene.y > [self childNodeWithName:@"Hero"].position.y)
)
{
[[self childNodeWithName:@"Hero"].physicsBody applyImpulse:CGVectorMake(5,0)];
[[self childNodeWithName:@"Hero"].physicsBody applyImpulse:CGVectorMake(0, 10)];
NSLog(@"jump forward done");
}
Run Code Online (Sandbox Code Playgroud)
但问题是速度不受限制,当我这样做两到三次时,角色变得非常快.我尝试了很多属性(速度,角速度等),我没有找到任何令人满意的东西.有人知道如何设置速度限制或任何"技巧"来控制角色的最大速度吗?
我需要在创建后通过电子邮件发送一个 Excel 文件,但不幸的是 php 没有在服务器中写入的权限,所以我需要在不保存文件的情况下发送它。而且通过浏览器这是不可能的,因为您需要等待创建 Excel 并且数据库检索非常慢,所以我想知道是否有办法直接通过电子邮件发送它。我已经在谷歌上搜索了一段时间,还没有找到解决方案,非常感谢!
编辑以添加代码:
<?php
/** Include path **/
ini_set('include_path', ini_get('include_path').';../Classes/');
/** PHPExcel */
include (dirname(__FILE__)."/../../lib/PHPExcel.php");
/** PHPExcel_Writer_Excel2007 */
include (dirname(__FILE__)."/../../lib/PHPExcel/Writer/Excel2007.php");
/** Php Mailer */
require (dirname(__FILE__).'/../PHPMailer/class.phpmailer.php');
require '../mysqlvars.php';
require '../lib/db.php';
require '../lib/form_functions.php';
require 'includes/session.php';
require("classes.php");
$dbConn = connectDB($dbHost, $dbUser, $dbPass, $dbDB);
if (!$dbConn) {
die ('Cannot connect to database');
}
require 'includes/session.php';
require '../init.php';
require '../licence.php';
require("classes.php");
// Create new PHPExcel object
echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();
// …Run Code Online (Sandbox Code Playgroud) 由于我什至无法与故事板进行一次成功的合并,因此我正在尝试切换到 xib 文件。我试图像在故事板中一样将一个 xib 文件设置为 initialViewController,所以首先我在故事板中禁用了该属性。按照谷歌的一些例子,我做了一个应该返回一个 xib 文件的扩展:
extension UIViewController {
class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> UIViewController? {
return UINib(
nibName: nibNamed,
bundle: bundle
).instantiateWithOwner(nil, options: nil)[0] as? UIViewController
}
Run Code Online (Sandbox Code Playgroud)
然后从应用程序委托中调用该类函数并尝试像这样将 xib 文件加载为根视图控制器:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let mainView = UIViewController.loadFromNibNamed("MainView")
//window?.addSubview(mainView!)
self.window?.rootViewController = mainView
return true
}
Run Code Online (Sandbox Code Playgroud)
我的 xib 文件名是 MainView.xib,我有一个 UIView …
我SKSpriteNode为物理体大小为0.0的相机创建了一个,以避免不必要的碰撞和世界节点:
-(void)createSceneContents {
SKNode *world = [SKNode node];
world.name = @"world";
self.anchorPoint = CGPointMake(0.1, 0);
SKSpriteNode *camera = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(300, 300)];
camera.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(0, 0)];
camera.physicsBody.affectedByGravity = NO;
camera.physicsBody.usesPreciseCollisionDetection = NO;
camera.physicsBody.categoryBitMask = noColisions;
camera.alpha = 0.5;
camera.zPosition = 1;
camera.name = @"cam";
[self addChild:world];
[world addChild:camera];
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一个小教程在spriteKit平台游戏中添加相机,但我甚至无法移动视图,我不知道如何访问移动视图的属性.谁知道我做错了什么?这是我的代码:
-(void)didSimulatePhysics
{
//I've tried with @"cam" and @"hero"
[self centerOnNode: [self childNodeWithName:@"world"]];
}
-(void)centerOnNode:(SKNode *) camera {
CGPoint cameraPositionInScene = [camera.scene convertPoint:camera.position fromNode:camera.parent];
[self.parent setPosition:CGPointMake(
camera.parent.position.x - …Run Code Online (Sandbox Code Playgroud) 我正在编程一个iOS游戏,我使用方法更新很多东西,这是在游戏速度刷新时调用(目前每秒60次),但问题是如果帧速率下降(例如通知,或者游戏中的任何行为,当被调用时,它会使fps下降一点......)然后错误来了....
一个快速的例子是,如果我有一个80张图片的动画,40个用于跳跃,40个用于下降,我需要1,2秒来运行动画,所以如果跳跃花费1,2秒就可以了,动画会运行.但是如果我的fps下降到30,那么动画将会减少,因为它需要2,4秒来运行动画,但跳跃仍然是1,2秒.这只是一个快速的例子,如果帧速率下降,游戏中有很多意想不到的行为,所以我的问题是,游戏开发者是否非常依赖帧速率或有一种方法可以避免这些fps-bug?(编程或任何技巧的另一种方式?)
ios ×9
sprite-kit ×6
objective-c ×5
swift ×3
swift2 ×3
xcode ×3
xcode7 ×2
asynchronous ×1
php ×1
phpexcel ×1
spring ×1
storyboard ×1
uitableview ×1