Nano Hash - криптовалюты, майнинг, программирование

Scenekit - как я могу перетаскивать

С кодом, показанным ниже, я могу иметь сферу в своей сцене. с синим фоном... Я новичок в sceneKit в iOS. Я хочу знать, как мы можем переместить этот объект (перетащить сферу) в другое положение (Drop) .

    override func viewDidLoad() {
    super.viewDidLoad()
    sceneView = SCNView(frame: self.view.frame)
    sceneView.scene = SCNScene()
    self.view.addSubview(sceneView)


    let groundGeometry = SCNFloor()
    groundGeometry.reflectivity = 0
    let groundMaterial = SCNMaterial()
    groundMaterial.diffuse.contents = UIColor.blueColor()
    groundGeometry.materials = [groundMaterial]
    ground = SCNNode(geometry: groundGeometry)

    let camera = SCNCamera()
    camera.zFar = 10000
    self.camera = SCNNode()
    self.camera.camera = camera
    self.camera.position = SCNVector3(x: -20, y: 15, z: 20)
    let constraint = SCNLookAtConstraint(target: ground)
    constraint.gimbalLockEnabled = true
    self.camera.constraints = [constraint]

    let ambientLight = SCNLight()
    ambientLight.color = UIColor.darkGrayColor()
    ambientLight.type = SCNLightTypeAmbient
    self.camera.light = ambientLight

    let spotLight = SCNLight()
    spotLight.type = SCNLightTypeSpot
    spotLight.castsShadow = true
    spotLight.spotInnerAngle = 70.0
    spotLight.spotOuterAngle = 90.0
    spotLight.zFar = 500
    light = SCNNode()
    light.light = spotLight
    light.position = SCNVector3(x: 0, y: 25, z: 25)
    light.constraints = [constraint]

    let sphereGeometry = SCNSphere(radius: 1.5)
    let sphereMaterial = SCNMaterial()
    sphereMaterial.diffuse.contents = UIColor.greenColor()
    sphereGeometry.materials = [sphereMaterial]
    sphere1 = SCNNode(geometry: sphereGeometry)
    sphere1.position = SCNVector3(x: -15, y: 1.5, z: 0)


    sceneView.scene?.rootNode.addChildNode(self.camera)
    sceneView.scene?.rootNode.addChildNode(ground)
    sceneView.scene?.rootNode.addChildNode(light)

    sceneView.scene?.rootNode.addChildNode(sphere1)

}

Ответы:


1

Ми, я попробовал sceneKit с Objective-C несколько месяцев назад, может быть, это поможет вам обобщить решение. Для перетаскивания узлов я использовал UIPanGestureRecognizer.

//Распознаватель жестов для панорамирования (перемещения)

UIGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
[[self view] addGestureRecognizer:panGestureRecognizer];

// Затем в "handlePanFrom"

- (void)handlePanFrom:(UIPanGestureRecognizer *)recognizer {


    if (recognizer.state == UIGestureRecognizerStateChanged)
    {
        //Getting the new location of the view after pan gesture
        CGPoint translation = [recognizer translationInView:recognizer.view];

        //Converting this translation as per the SpriteKit coordinates
        translation = CGPointMake(translation.x, -translation.y);

        //Changing the position of sphere node with the translation
        CGPoint position = [sphere position];
        [sphere setPosition:CGPointMake(position.x + translation.x, position.y + translation.y)];

        //Resetting the values of recognizer
        [recognizer setTranslation:CGPointZero inView:recognizer.view];

    }
    else if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        float scrollDuration = 1;
        CGPoint velocity = [recognizer velocityInView:recognizer.view];

        //Taking current position of sphere node
        CGPoint pos = [sphere position];

        //Finding change in position on the basis of velocity and scroll duration
        CGPoint p = mult(velocity, scrollDuration);

        //Calculating new position of the sphere
        CGPoint newPos = CGPointMake(pos.x + p.x, pos.y - p.y);

        [sphere removeAllActions];

        //Action for moving the sprite to the new location
        SKAction *moveTo = [SKAction moveTo:newPos duration:scrollDuration];
        [moveTo setTimingMode:SKActionTimingEaseOut];
        [sphere runAction:moveTo];
    }
}

Для получения дополнительной помощи вы можете проверить этот хороший учебник http://www.raywenderlich.com/44270/sprite-kit-tutorial-how-to-drag-and-drop-sprites

13.08.2015
  • Привет..Спасибо за код..Но он не работает нормально...Сфера - это SCNNode, и я не могу дать SKAction.(Я импортировал SpriteKit и попробовал SKAction), а также проблема с позицией: как im Получение позиции в SCNVector3..converting это к CGPoint не удалось.. 14.08.2015
  • М-м... извините за предоставление кода для spriteKit вместо sceneKit. Я должен был обратить на это внимание. 14.08.2015
  • Ребята действия почти такие же. let action = SCNAction.move (до: SCNVector, продолжительность: TimeInterval) 27.08.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..