Я новичок в SpriteKit и пытаюсь попрактиковаться, создавая простую 2D-игру. Я дошел до того, что моя карта отображалась на экране и обрезалась так, чтобы заполнить только около 1/3 экрана (чтобы можно было оставить место для других элементов управления и т. д.).
Однако применение жестов вращения и масштабирования карты вызывает у меня головную боль. Я понял, что если я поверну камеру (SKCameraNode), то повернется весь экран, а это не то, чего я хочу. Если хотите, вы можете увидеть мою попытку: . В видео я хотел бы, чтобы карта вращалась и масштабировалась внутри зеленого прямоугольника и аккуратно обрезалась только внутри зеленого прямоугольника. Но, как видите, все вращается.
Я пытался поместить свой SKCameraNode внутри SKCropNode, но это не помогло.
Кроме того, я попытался применить поворот к моему объекту SKTileMapNode, и это действительно работает правильно и обрезает видимую область карты до 1/3 экрана. Однако вращение, похоже, не сосредоточено вокруг центрального представления пользователя, а ось вращения всегда находится немного левее или правее центра просматриваемой карты. Из-за этого очень сложно поворачивать и масштабировать карту любым полезным способом.
Есть ли способ использовать SKCameraNode и обрезать ее «правильно»? Если я поверну весь SKTileMapNode, то мне нужно будет выполнить некоторые сложные математические действия, чтобы вычислить новое положение SKTileMapNode после вращения, чтобы центрировать его в представлении, и это кажется мне очень сложным (не любителем математики). здесь, извините).
Вот как я визуализирую свою карту:
private func renderMap() {
guard let map = currentMap else { return }
guard let textureAtlas = textureAtlas else {
print("Texture atlas not loaded")
return
}
let tileSet = createTileSet(from: textureAtlas)
let columns = map.mapData[0].count
let rows = map.mapData.count
let tileMap = SKTileMapNode(tileSet: tileSet, columns: columns, rows: rows, tileSize: tileSize)
tileMap.anchorPoint = CGPoint(x: 0.5, y: 0.5)
// Fill the tile map with tiles based on the mapData
for row in 0 ..< rows {
for column in 0 ..< columns {
let tileName = map.mapData[row][column]
if let tileGroup = tileSet.tileGroups.first(where: { $0.name == tileName }) {
tileMap. setTileGroup(tileGroup, forColumn: column, row: row)
}
}
}
// Create a crop node
let cropNode = SKCropNode()
let cropWidth = tileSize.width * 3
let maskNode = SKShapeNode(rect: CGRect(x: 0, y: 0, width: cropWidth, height: 300))
maskNode.fillColor = .white
cropNode.maskNode = maskNode
cropNode.addChild(tileMap)
self.addChild(cropNode)
}
Вот мой обработчик вращения:
// Handle rotation
@objc private func handleRotation(gesture: UIRotationGestureRecognizer) {
print("handleRotation")
guard let camera = camera else { return }
if gesture. state == .changed | | gesture.state == .ended {
camera.zRotation -= gesture.rotation
gesture.rotation = 0.0 // Reset rotation factor
print("handleRotation complete")
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... nd-zooming
Вращение и масштабирование iPhone SpriteKit ⇐ IOS
Программируем под IOS
-
Anonymous
1734295554
Anonymous
Я новичок в SpriteKit и пытаюсь попрактиковаться, создавая простую 2D-игру. Я дошел до того, что моя карта отображалась на экране и обрезалась так, чтобы заполнить только около 1/3 экрана (чтобы можно было оставить место для других элементов управления и т. д.).
Однако применение жестов вращения и масштабирования карты вызывает у меня головную боль. Я понял, что если я поверну камеру (SKCameraNode), то повернется весь экран, а это не то, чего я хочу. Если хотите, вы можете увидеть мою попытку: [youtube]UHIifaoGQQw[/youtube]. В видео я хотел бы, чтобы карта вращалась и масштабировалась внутри зеленого прямоугольника и аккуратно обрезалась только внутри зеленого прямоугольника. Но, как видите, все вращается.
Я пытался поместить свой SKCameraNode внутри SKCropNode, но это не помогло.
Кроме того, я попытался применить поворот к моему объекту SKTileMapNode, и это действительно работает правильно и обрезает видимую область карты до 1/3 экрана. Однако вращение, похоже, не сосредоточено вокруг центрального представления пользователя, а ось вращения всегда находится немного левее или правее центра просматриваемой карты. Из-за этого очень сложно поворачивать и масштабировать карту любым полезным способом.
Есть ли способ использовать SKCameraNode и обрезать ее «правильно»? Если я поверну весь SKTileMapNode, то мне нужно будет выполнить некоторые сложные математические действия, чтобы вычислить новое положение SKTileMapNode после вращения, чтобы центрировать его в представлении, и это кажется мне очень сложным (не любителем математики). здесь, извините).
Вот как я визуализирую свою карту:
private func renderMap() {
guard let map = currentMap else { return }
guard let textureAtlas = textureAtlas else {
print("Texture atlas not loaded")
return
}
let tileSet = createTileSet(from: textureAtlas)
let columns = map.mapData[0].count
let rows = map.mapData.count
let tileMap = SKTileMapNode(tileSet: tileSet, columns: columns, rows: rows, tileSize: tileSize)
tileMap.anchorPoint = CGPoint(x: 0.5, y: 0.5)
// Fill the tile map with tiles based on the mapData
for row in 0 ..< rows {
for column in 0 ..< columns {
let tileName = map.mapData[row][column]
if let tileGroup = tileSet.tileGroups.first(where: { $0.name == tileName }) {
tileMap. setTileGroup(tileGroup, forColumn: column, row: row)
}
}
}
// Create a crop node
let cropNode = SKCropNode()
let cropWidth = tileSize.width * 3
let maskNode = SKShapeNode(rect: CGRect(x: 0, y: 0, width: cropWidth, height: 300))
maskNode.fillColor = .white
cropNode.maskNode = maskNode
cropNode.addChild(tileMap)
self.addChild(cropNode)
}
Вот мой обработчик вращения:
// Handle rotation
@objc private func handleRotation(gesture: UIRotationGestureRecognizer) {
print("handleRotation")
guard let camera = camera else { return }
if gesture. state == .changed | | gesture.state == .ended {
camera.zRotation -= gesture.rotation
gesture.rotation = 0.0 // Reset rotation factor
print("handleRotation complete")
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79283166/iphone-spritekit-rotation-and-zooming[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия