Прямо сейчас я изучаю металл C ++, чтобы создать 3D -рендер. Однако для движения камеры нет нативного способа прочитать события клавиатуры MacOS и мыши в C ++. Из-за этого я создал Swift Inpint Manager и использую взаимодействие Swift C ++ для инициализации класса и привлечения его методов, например: < /p>
class Renderer
{
public:
Renderer();
private:
ApplicationName::InputManager* input_manager;
}
Renderer::Renderer()
{
input_manager->init();
}
< /code>
Проблема заключается в том, что в файле _swiftcxxinteropopecualboy.h я получаю поток 1: exc_bad_access (code = 1, address = 0x0) ошибка: < /p>
class _impl_RefCountedClass {
public:
static SWIFT_INLINE_THUNK void *_Nonnull getOpaquePointer(
const RefCountedClass &object) {
return object._opaquePointer; // this line
}
};
< /code>
Я совершенно новичок в совместимости Swift C ++, поэтому я не знаю, в чем проблема, но, по -видимому, это вызвано управлением памятью Свифта. Любая помощь будет очень признателен!import Foundation
import GameController
public class InputManager {
private var keyboard: GCKeyboard?
private var mouse: GCMouse?
private var mouseDeltaX: Float = 0.0
private var mouseDeltaY: Float = 0.0
private var keyStates: [String: Bool] = [:]
public init() {
setupInputDevices()
}
private func setupInputDevices() {
// Setup keyboard
keyboard = GCKeyboard.coalesced
keyboard?.keyboardInput?.keyChangedHandler = { [weak self] (keyboard, key, keyCode, pressed) in
self?.keyStates[key.sfSymbolsName!] = pressed
}
// Setup mouse
mouse = GCMouse.current
mouse?.mouseInput?.mouseMovedHandler = { [weak self] (mouse, deltaX, deltaY) in
self?.mouseDeltaX += Float(deltaX)
self?.mouseDeltaY += Float(deltaY)
}
}
public func isKeyPressed(_ keyName: String) -> Bool {
return keyStates[keyName] ?? false
}
public func getMouseDeltaX() -> Float {
let delta = mouseDeltaX
mouseDeltaX = 0.0 // Reset after reading
return delta
}
public func getMouseDeltaY() -> Float {
let delta = mouseDeltaY
mouseDeltaY = 0.0 // Reset after reading
return delta
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... interopera
Thread 1: Exc_BAD_ACCESS (code = 1, address = 0x0) Ошибка с совместимостью Swift C ++ ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение