Я в основном пишу на JavaScript, но для проекта мне нужно написать на Swift.Таким образом, чтобы ускорить процесс обучения, я хочу написать код Swift, очень похожий на тот, который я написал бы в JavaScript.
В JavaScript у меня есть метод draw()
, я вызываю этот метод каждую миллисекунду.Например, в draw()
я мог нарисовать квадрат на холсте (сцене).Затем, если я увеличиваю позицию X квадрата, когда снова вызывается draw()
, Квадрат перемещается.То же самое можно сделать с изображениями, поэтому с помощью этой базовой логики можно построить игру.
Теперь в Swift я попытался сделать нечто подобное, создать метод, аналогичный draw()
, и вызватьэтот метод снова и снова.Тем не менее, анимация действительно прерывистая и медленная, и если бы я делал то же самое в JavaScript, она выглядит хорошо.
import UIKit
import PlaygroundSupport
import Foundation
public class sim : UIView{
var circleX = 100;
var circleY = 135;
public init(){
super.init(frame: CGRect(x: 0, y: 0, width: 500, height: 300))
self.backgroundColor = #colorLiteral(red: 0.9428111294, green: 0.9428111294, blue: 0.9428111294, alpha: 1)
var simulationTimer = Timer.scheduledTimer(timeInterval: 0.00001, target: self, selector: #selector(drawScene), userInfo: nil, repeats: true)
}
@objc func drawScene(){
let background = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 300))
background.backgroundColor = #colorLiteral(red: 0.9428111294, green: 0.9428111294, blue: 0.9428111294, alpha: 1)
self.addSubview(background)
circleX+=5
let circle = UIView(frame: CGRect(x: circleX, y: circleY, width: 30, height: 30))
circle.backgroundColor = #colorLiteral(red: 0.4633018092, green: 0.4633018092, blue: 0.4633018092, alpha: 1)
circle.layer.cornerRadius = 15
circle.layer.borderWidth = 3.0
circle.layer.borderColor = #colorLiteral(red: 0.2512571216, green: 0.2528424561, blue: 0.2970899045, alpha: 1)
self.addSubview(circle)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
PlaygroundPage.current.liveView = sim()
Поэтому я использовал Playgrounds, поэтому я импортировал поддержку Playground.Я создал класс sim, в котором у меня есть функция drawScene, где я сначала рисую прямоугольник по всей сцене, а затем рисую круг.Когда он вызывается снова, прямоугольник рисует поверх предыдущего круга.И новый круг нарисован.Однако, как я уже говорил, это выглядит очень изменчиво и не гладко.Как бы я сделал это гладко.