어떻게 swiftUI를 사용하여 탈출 게임 3부분을 만듭니까

27334 단어 gamedeviosswiftuiswift

확대 정보


다음 임무는 줌인 줌아웃 기술이다.이것은 네가 화면의 어느 위치를 클릭할 수 있는 방법이다.이 방에 대한 더 많은 정보를 얻기 위해 화면이 이 위치를 확대합니다.예를 들어, 당신은 책상 아래에서 카펫 위에 열쇠가 있는지, 컴퓨터 화면에서 무언가를 찾거나, 다른 사람과 이야기를 나눌 수 있다.
이것은 간단한 함수인 것 같지만, 그것은 매우 중요하다.비록 그것은 보기에는 매우 간단하지만, 정확하게 실현하기는 좀 까다롭다.
이것은 물건을 놓는 방법을 가리킨다.
나는 이 보이지 않는 버튼을 빈 버튼이라고 부른다.이 단추를 눌렀을 때, 화면은 이전과 다른 동쪽, 서쪽, 북쪽, 남쪽으로 전환됩니다.
따라서 확대한 후에 왼쪽과 오른쪽 창 단추를 항상 볼 수 있도록 비활성화해야 합니다.

캔버스는 게임의 모든 화면 전환을 위한 청사진을 그리는 파일입니다.바로 나무 줄기가 많은 창문을 한데 연결시켰다.
zoomChainIndex는 창 단추를 비활성화할 수 있습니다.
내가 잠시 후에 상세하게 설명할 바와 같이, 우리는 모든 로고에 단독 색인 모델을 만들고, 화포의 중심에 모든 로고 값에 대량의if문장을 작성할 것이다.
CanvasUI.swift

import SwiftUI

struct CanvasUI: View {

    @ObservedObject var itemData = ItemObject.shared
    @ObservedObject var cycle = CycleChain.shared
    @ObservedObject var scriptData = ScriptObject.shared
    @ObservedObject var windowObject = WindowObject.shared
    @ObservedObject var selectTabView = WindowSelect()

    var body: some View {
        ZStack {
            // move to window to window
            if cycle.windowChainIndex == 0 {
                // ZoomIn and ZoomOut
                if cycle.zoomChainIndex == 0 {
                    WindowButton(WWindow: AnyView(W_Window()), NWindow: AnyView(N_Window()), EWindow:  AnyView(E_Window()), SWindow: AnyView(S_Window()))
                } // disable WindowButton
                if cycle.zoomChainIndex == 1 {
                    if windowObject.window.isZoom == true {
                        N_Zoom_Window()
                    }
                    if windowObject.window1.isZoom == true {
                        E_Zoom_Window()
                    }
                }
            }
            // Second Floor
            if cycle.windowChainIndex == 1 {

            }
            // to one way move
            if cycle.windowChainIndex == 2 {
                // scene
            }
            VStack {
                Spacer()
                ItemDock()
            }
        }
    }


좀 시끄럽지만 어쩔 수 없어요.기본 줌 아웃에서 돌아올 때 어느 방향으로든 북쪽으로 돌아갈 수 있는 버그가 하나 더 있습니다. 어느 방향으로든 상관없습니다.만약 네가 이 점을 마음에 둔다면, 너는 어느 시간 내에 이 게임을 할 수 없을 것이다.

제목 정보


우리는 천천히 끝내고 있다.우리는 이미지를 기반으로 하는 방식 외에 텍스트 표현 방식을 추가하려고 하기 때문에 자막을 표시할 위치를 미리 남기기로 결정했다.따라서 자막이 나오는 프로젝트 정지점 위에 스크립트 정지점을 만들 것입니다.최종적으로, 우리는 이곳에서 텍스트 게임을 만들 수 있기를 희망한다.참고로 "도구"옵션 카드의 화면 하반부를 봅시다.프로젝트 연결이 스크립트 연결에 완전히 붙어 있지 않다는 것을 알 수 있습니다.이것은 작은 디테일이다.
import SwiftUI

struct CanvasUI: View {

    @ObservedObject var itemData = ItemObject.shared
    @ObservedObject var cycle = CycleChain.shared
    @ObservedObject var scriptData = ScriptObject.shared
    @ObservedObject var windowObject = WindowObject.shared
    @ObservedObject var selectTabView = WindowSelect()

    var body: some View {
        ZStack {
            // move to window to window
            if cycle.windowChainIndex == 0 {
                // ZoomIn and ZoomOut
                if cycle.zoomChainIndex == 0 {
                    WindowButton(WWindow: AnyView(W_Window()), NWindow: AnyView(N_Window()), EWindow:  AnyView(E_Window()), SWindow: AnyView(S_Window()))
                } // disable WindowButton
                if cycle.zoomChainIndex == 1 {
                    if windowObject.window.isZoom == true {
                        N_Zoom_Window()
                    }
                    if windowObject.window1.isZoom == true {
                        E_Zoom_Window()
                    }
                }
            }
            // Second Floor
            if cycle.windowChainIndex == 1 {

            }
            // to one way move
            if cycle.windowChainIndex == 2 {
                // scene
            }
            // add to spacing
            VStack(spacing: 0) {
                Spacer()
                ItemDock()
            }
        }
    }


이것은 애플의 기본 설정 때문이다.이것은 사람들이 윈도우즈 아이폰으로 오인하지 않도록 평면 디자인 프로그램을 만드는 것을 방지하기 위해서이다.만약 당신이 그것을 더욱 편안하고 몸에 맞게 하려고 한다면, 당신은 다음과 같은 내용을 쓸 수 있습니다.현재 그것은 적절하게 보존되어 있다.
만약 누군가가 이 점에 관심을 가지고 있다면, 그들은 마이크로소프트 직원이거나 노키아 직원이다.
import Foundation


struct ScriptModel : Identifiable {
    var id : Int
    var text : String
    var isAppear : Bool
}

class ScriptObject : ObservableObject {
    static let shared = ScriptObject()
    private init(){}

    @Published var script = ScriptModel(id: 0, text: "This is my 0 script.", isAppear: false)
    @Published var script1 = ScriptModel(id: 1, text: "This is my 1 script.", isAppear: false)
    @Published var script2 = ScriptModel(id: 2, text: "This is my 2 script.", isAppear: false)
    @Published var script3 = ScriptModel(id: 3, text: "This is my 3 script.", isAppear: false)
    @Published var script4 = ScriptModel(id: 4, text: "This is my 4 script.", isAppear: false)
    @Published var script5 = ScriptModel(id: 5, text: "This is my 5 script.", isAppear: false)
    @Published var script6 = ScriptModel(id: 6, text: "This is my 6 script.", isAppear: false)
    @Published var script7 = ScriptModel(id: 7, text: "This is my 7 script.", isAppear: false)
    @Published var script8 = ScriptModel(id: 8, text: "This is my 8 script.", isAppear: false)
    @Published var script9 = ScriptModel(id: 9, text: "This is my 9 script.", isAppear: false)
    @Published var script10 = ScriptModel(id: 10, text: "This is my 10 script.", isAppear: false)
    @Published var script11 = ScriptModel(id: 11, text: "This is my 11 script.", isAppear: false)
    @Published var script12 = ScriptModel(id: 12, text: "This is my 12 script.", isAppear: false)
    @Published var script13 = ScriptModel(id: 13, text: "This is my 13 script.", isAppear: false)
}


import SwiftUI



struct ScriptDock: View {
    @State var script : ScriptModel
    var body: some View {
        ZStack{
            Rectangle()
                .fill(Color.green.opacity(0.3))
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 50, maxHeight: 70)
            ScriptText(script: $script)
        }
    }
}


// This view is for script book
struct ScriptText : View {
    @State var flg = true
    @Binding var script : ScriptModel
    @ObservedObject var cycle = CycleChain.shared

    var body: some View {
        if self.flg {
            Text(script.text)
                .onTapGesture {
//                    cycle.scriptChainIndex = script.id
                    self.flg.toggle()
            }
        } else {

        }
    }
}




자막도 별도로 모델링·관리된다.
자막을 수정하거나 재배열해야 하는 경우가 많기 때문이다.
만약 당신이 동영상을 위해 자막을 제작한 적이 있다면, 당신은 이 점을 잘 이해할 수 있을 것이다.자막의 성질에 대해 당신은 자막의 출현에 일종의 패턴이 있음을 알아차릴 것이다.
다음 그림에서 보듯이 하나의 스크립트는 사건이 발생한 후 바로 스크립트 도크에 나타난다. 이것은 상황에 대한 묘사, 캐릭터의 대사 또는 천상의 소리(힌트)로 게임의 난이도를 낮출 수 있다.
모든 스크립트는 이벤트의 스크립트 색인 번호와 연결되어 있어야 하며, 일정 시간 후에 사라질 수도 있고, 스크립트 자체를 클릭해서 삭제할 수도 있다.
두 가지 종류의 스크립트가 있습니다. 하나는 자기가 일하는 스크립트이고, 다른 하나는 여러 개의 스크립트를 연속으로 표시하는 스크립트입니다.
여러 개의 스크립트에 대해 색인 번호를 스크립트 번호에 연결하여 점차적으로 늘릴 수 있습니다.이 경우 긴 스크립트가 완성되면 기본 숫자인 0을 설정해야 합니다.

체인 색인 정보


같은 층에 네 개의 보기(동, 서, 북, 남, 서)만 있어서 나는 매우 지루하다고 느낀다.따라서 일부 조건이 충족되면 사용자가 위층으로 올라갈 수 있도록 이렇게 하자.이 경우, 우리는 축소에 사용할 새 색인을 만들어야 한다.색인은 두 가지 주요 유형이 있는데 그것이 바로 다중 색인과 단방향 색인이다.첫 번째는 창 인덱스입니다.이것은 마루와 위쪽 마루를 연결하는 색인이다.다음 그림과 같습니다.

이것은 배수다.물론, 너는 층간을 왕복할 수도 있고, 편도도 할 수 있다.그것도 시간 여행으로 쓸 수 있다.1980년대부터 2020년대까지: 리건에서 트럼프까지.우리가 앞에서 언급한 zoom Chian Index도 배수이다. 왜냐하면 입력과 출력 사이를 왔다갔다하기 때문이다.
마지막 하나만 단방향이야.이것은 키 체인 인덱스입니다.
물건을 얻는 가장 중요한 목적은 무엇입니까?이것은 네 앞에 있는 수수께끼를 풀기 위해서다.아래의 도표를 보세요.

Key1을 사용하여 금고를 여는 방법에 대한 그림입니다. 이 그림에는 새 열쇠인 Key2가 포함되어 있습니다. 다른 금고를 여는 데 사용됩니다.만약 사용한 열쇠는 어떤 금고도 열 수 없다고 가정한다.일단 네가 문제를 해결하면 다시 무대로 돌아갈 수 없다.만약 네가 이렇게 하지 않는다면, 게임 창설자가 예상하지 못한 작은 고장이 발생할 수도 있다.이것은 전체 게임에서 게이머들이 이야기를 완성하도록 인도하는 가장 중요한 방법이다.중요하지만 증가만 허용하는 Int 유형 변수입니다.

import Foundation


class CycleChain : ObservableObject {
    static let shared = CycleChain()
    private init(){}

    @Published var windowChainIndex : Int = 0
    @Published var zoomChainIndex : Int = 0
    @Published var animeChainIndex : Int = 0
    // One Way

    @Published var keyChainIndex : Int = 0
    @Published var scriptChainIndex : Int = 0
}


좋은 웹페이지 즐겨찾기