AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-1151334

soleil's questions

Martin Hope
soleil
Asked: 2025-02-08 02:04:02 +0800 CST

Cabeçalho duplo fixo no SwiftUI

  • 5

Aqui está um exemplo de código completo de uma tentativa de visualização de cabeçalho duplo fixo:

struct ContentView: View {
    var body: some View {
        ScrollView(showsIndicators: false) {
            LazyVStack(spacing: 0, pinnedViews: .sectionHeaders) {
                Section {
                    SecondView()
                } header: {
                    HeaderView()
                }
            }
        }
    }
}

struct HeaderView: View {
    var body: some View {
        Rectangle()
            .fill(.green)
            .frame(height: 50)
    }
}

struct SecondView: View {
    var body: some View {
        LazyVStack(spacing: 0, pinnedViews: .sectionHeaders) {
            Section {
                VStack {
                    ForEach(0..<20) { index in
                        ItemView(index: index)
                    }
                }
            } header: {
                SecondHeaderView()
            }
        }
    }
}

struct SecondHeaderView: View {
    var body: some View {
        Rectangle()
            .fill(.red)
            .frame(height: 60)
    }
}

struct ItemView: View {
    let index: Int
    var body: some View {
        VStack {
            Text("Item \(index)")
                .padding()
        }
        .frame(height: 80)
        .background(.gray)
    }
}

#Preview {
    ContentView()
}

Note que inicialmente, o vermelho SecondHeaderViewestá corretamente posicionado abaixo do verde HeaderView. No entanto, ao rolar, o cabeçalho vermelho rola abaixo do cabeçalho verde até que fique na mesma posição y que o cabeçalho verde.

Preciso que o cabeçalho vermelho fique ancorado abaixo do cabeçalho verde. Note que ele SecondViewpode não estar sempre incorporado em um ContentView. Ele poderia viver sozinho e ainda precisar de seu próprio cabeçalho fixo para funcionar, então acho que ambas as visualizações precisam do LazyVStack.

Eu mexi em vários deslocamentos de visualização do GeometryReader, tentando posicionar o cabeçalho vermelho corretamente, mas não consegui.

swiftui
  • 1 respostas
  • 37 Views
Martin Hope
soleil
Asked: 2025-01-03 04:49:35 +0800 CST

Cabeçalho fixo do SwiftUI scrollview sem usar lista

  • 5

Tenho lutado GeometryReadere .onChange(of: geo.frame(in: .global).minY)tentado por muito tempo fazer isso funcionar sem muito sucesso. Considere o seguinte:

struct TestScreen: View {
    
    var body: some View {
        NavigationStack {
            ScrollView {
                VStack {
                    Text("View A")
                        .frame(height: 50)
                        .frame(maxWidth: .infinity)
                        .background(.green)
                    Text("View B - Sticky")
                        .frame(height: 50)
                        .frame(maxWidth: .infinity)
                        .background(.blue)
                    ForEach(0..<15) { i in
                        Text("View \(i)")
                            .frame(height: 50)
                            .frame(maxWidth: .infinity)
                            .background(Color.red)
                    }
                }
                
            }
            .navigationBarTitleDisplayMode(.inline)
            .toolbarBackground(.clear, for: .navigationBar)
            .toolbar {
                ToolbarItem(placement: .principal) {
                    Text("Testing")
                        .foregroundColor(.purple)
                }
            }
        }
    }
}

O objetivo é fazer com que a View B fique no topo (logo abaixo da barra de navegação) quando você rolar a view para cima e, claro, tome seu lugar normal na scrollview quando você rolar de volta para baixo. Eu sei que você pode fazer cabeçalhos fixos com Liste Sectionsmas isso não atende às minhas necessidades porque note que a View B (a view fixa) não é necessariamente o primeiro item na scrollview.

Observe também que a Exibição B deve permanecer no topo de todo o outro conteúdo no VStack para que o outro conteúdo role abaixo dela.

swiftui
  • 1 respostas
  • 28 Views
Martin Hope
soleil
Asked: 2024-12-29 14:10:14 +0800 CST

Animação de texto de pontuação pré-fabricada no Unity

  • 5

Criei um prefab simples chamado ScorePopup. Ele tem um TextMeshProcomponente. Ele também tem um Animatorque move o texto para cima em 2 unidades do mundo e desbota a cor em 1 segundo. Então, no animador, ele tem

ScorePopup: Text Mesh Pro.Font Color - goes from 1 to 0 over 1 second.
ScorePopup: Anchored Position
  Anchored Position.x (stays at 0)
  Anchored Position.y - goes from 0 to 2 over 1 second.

Agora, imagine um jogo em que um inimigo está se movendo da direita para a esquerda. Ele é atingido por uma bala. Quero instanciar este ScorePopup na posição em que o inimigo foi atingido.

Tentei instanciá-lo no meu script de jogo:

GameObject go = Instantiate(scorePopupPrefab, enemy.transform.position, Quaternion.identity);
go.GetComponent<TMP_Text>().text = score.ToString();

O problema é que o ScorePopup não aparece na posição do inimigo - ele aparece em 0,0 na minha cena, provavelmente por causa dos Anchored Positionvalores na animação.

Então tentei instanciar o ScorePopup no meu script inimigo:

GameObject go = Instantiate(scorePopupPrefab, transform.position, Quaternion.identity, transform);

Isso coloca corretamente o scorePopup onde o inimigo está. No entanto, o scorePopup se move para a esquerda com o inimigo. Quero que o score popup apareça na posição de ataque no espaço de cena/mundo e faça sua animação lá. Ele não deve se mover com o inimigo.

Qual é a solução aqui? Como posso instanciar um prefab na minha cena em uma posição designada se o prefab tem uma animação de posição interna? Isso é para o cenário muito comum em que você vê uma pontuação flutuar para cima quando um jogador ganha pontos ao atacar ou obter um objeto.

Editar: O prefab de texto não tem uma tela. Ele foi criado como um objeto vazio e tem um TMPRo - Textcomponente (e um Animator) adicionado a ele para exibir o texto.

Eu também tentei isso:

public class ScorePopup : MonoBehaviour
{
    private Animator animator;

    void Awake()
    {
        animator = GetComponent<Animator>();
        if (animator != null)
        {
            animator.enabled = false;
            StartCoroutine(EnableAnimatorAfterDelay(0.1f));
        }
    }

    IEnumerator EnableAnimatorAfterDelay(float delay)
    {
        yield return new WaitForSeconds(delay);
        animator.enabled = true;
    }
}

Ele aparece brevemente na posição correta, mas depois muda para 0,0 quando a animação é ativada :(

unity-game-engine
  • 2 respostas
  • 32 Views
Martin Hope
soleil
Asked: 2024-11-10 00:14:47 +0800 CST

Por que meu objeto de jogo não se move quando sua transformação muda?

  • 6

Estou tentando mover suavemente um objeto do ponto a para o ponto b:

    Instantiate(cat, OffScreenLeft(), Quaternion.identity);
    Debug.Log("start position: " + OffScreenLeft());
    Debug.Log("end position: " + InPosition());

    StartCoroutine(MoveFromTo(cat.transform, OffScreenLeft(), InPosition(), 3f));
    
    IEnumerator MoveFromTo(Transform objectToMove, Vector3 a, Vector3 b, float speed) {
            float step = (speed / (a - b).magnitude) * Time.fixedDeltaTime;
            float t = 0;
            while (t <= 1.0f) {
                t += step; // Goes from 0 to 1, incrementing by step each time
                objectToMove.position = Vector3.Lerp(a, b, t); // Move objectToMove closer to b
                yield return new WaitForFixedUpdate();
            }
            objectToMove.position = b;
            Debug.Log("move complete cat: " + cat.transform.position); 
        }

Aqui está a saída de depuração:

    start position: (-20.34, 4.33)
    end position: (-8.67, 4.33)
    move complete cat: (-8.67, 4.33, 0.00)

A saída de depuração mostra que o gato deveria ter se movido. Mas ele ainda aparece fora da tela, deixado em sua posição original. O que estou esquecendo?

unity-game-engine
  • 1 respostas
  • 34 Views
Martin Hope
soleil
Asked: 2024-11-03 03:19:51 +0800 CST

fazer um objeto girar de volta para zero ao longo do tempo

  • 6

Em uma corrotina, estou definindo a velocidade de um corpo rígido para seguir a localização da tela de toque:

rb.velocity = direction * touchDragPhysicsSpeed;

Mas eu também quero que sua rotação tenda de volta para zero graus. Como posso fazer isso?

A IA continua me dizendo para fazer algo assim:

Quaternion targetRotation = Quaternion.Euler(Vector3.zero);
rb.MoveRotation(Quaternion.Slerp(rb.rotation, targetRotation, rotationCorrectionSpeed));

Mas essa linha MoveRotation dá o erro:

Argumento 1: não é possível converter de 'float' para 'UnityEngine.Quaternion'

Essa é a abordagem correta? Se sim, como posso corrigir o erro? Ou há uma maneira melhor?

unity-game-engine
  • 2 respostas
  • 34 Views
Martin Hope
soleil
Asked: 2024-11-01 11:54:56 +0800 CST

Clique e arraste no Unity - mantenha o deslocamento

  • 5

O código a seguir funciona para clicar e arrastar um objeto:

    private void MousePressed(InputAction.CallbackContext context)
    {
        Vector2 mousePosition = Input.mousePosition;

        Vector3 worldPosition = mainCamera.ScreenToWorldPoint(new Vector3(mousePosition.x, mousePosition.y, -mainCamera.transform.position.z));
        worldPosition.z = 0;    

        Collider2D hitCollider = Physics2D.OverlapPoint(worldPosition);

        if (hitCollider != null)
        {
            StartCoroutine(DragUpdate(hitCollider.gameObject));
        }
    }

    private IEnumerator DragUpdate(GameObject clickedObject)
    {
        float initialDistance = Vector3.Distance(clickedObject.transform.position, mainCamera.transform.position);
        clickedObject.TryGetComponent<Rigidbody2D>(out var rb);
        while (mouseClick.ReadValue<float>() != 0) {
            Ray ray = mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue());

            if (rb != null) {
                Vector3 direction = ray.GetPoint(initialDistance) - clickedObject.transform.position;
                rb.velocity = direction * mouseDragPhysicsSpeed;
                yield return waitForFixedUpdate;
            } else {
                clickedObject.transform.position = Vector2.SmoothDamp(clickedObject.transform.position, ray.GetPoint(initialDistance), ref velocity, mouseDragSpeed);
                yield return null;
            }
        }
    }

O problema é que o objeto primeiro se move de modo que seu centro fique no cursor. Como posso manter o deslocamento inicial para que o cursor permaneça no mesmo local relativo ao objeto como quando ele começou a arrastar?

Estou aberto a quaisquer outras sugestões para melhorar este código - sou novo em Unity/C#. Obrigado!

unity-game-engine
  • 1 respostas
  • 18 Views
Martin Hope
soleil
Asked: 2024-03-16 02:17:18 +0800 CST

Alinhamento de sobreposição SwiftUI para centralização horizontal

  • 6

Preciso que a visualização A esteja centralizada na tela (vertical e horizontalmente). Preciso que a visualização B apareça 30px abaixo da visualização A, também centralizada horizontalmente. Mas A deve permanecer no centro da tela, sem se mover para cima quando B for adicionado. Posso realizar a maior parte disso usando .overlaye GeometryReader:

struct ContentView: View {
        
    var body: some View {
        VStack {
            ZStack {
                Rectangle()
                    .fill(.red)
                    .frame(width: 200, height: 100)
                    .overlay {
                        GeometryReader {geo in
                            Rectangle()
                                .fill(.blue)
                                .frame(width: 100, height: 100)
                                .offset(y: geo.size.height + 30)
                        }
                    }
            }
        }
    }
}

insira a descrição da imagem aqui

Não sei como centralizar o retângulo azul horizontalmente. Não sei necessariamente sua largura, embora esteja especificada aqui para fins visuais. Supondo que não conheço os valores exatos dos quadros para nenhuma das visualizações, como posso posicionar B 30px abaixo de A enquanto mantenho A no centro da tela? E existe uma estrutura de visualização melhor para fazer isso?

swiftui
  • 2 respostas
  • 29 Views
Martin Hope
soleil
Asked: 2024-03-09 01:43:17 +0800 CST

Ative Alterar somente quando interagir com

  • 5

Estou exibindo uma lista de verificação que permite ao usuário ativar e desativar opções:

ForEach(checklist.items.sorted(by: { $0.sortOrder < $1.sortOrder })) { item in
    @Bindable var item = item
    Toggle(item.title, isOn: $item.isChecked)
    .toggleStyle(CheckboxToggleStyle())
    .onChange(of: item.isChecked) { newValue in
        checklistChanged()
    }
}

func checklistChanged() {
    //check some things and update other parts of the UI
}

Isso funciona bem. No entanto, a lista de verificação é um SwiftData @Model que possui um método para redefinir a lista de verificação:

func reset() {
    for item in self.items {
        item.isChecked = false
    }
}

E chamar essa função faz com que a checklistChanged()função, na minha opinião, seja chamada (várias vezes) porque a isCheckedpropriedade está sendo alterada em todos os itens. Eu só quero que a checklistChanged()função seja chamada especificamente quando um usuário toca e altera o valor de uma caixa de seleção. Como posso separar essas preocupações? Tentei usar onTapGestureem vez de onChangealternar, mas não foi chamado.

swift
  • 1 respostas
  • 37 Views
Martin Hope
soleil
Asked: 2024-02-26 01:26:41 +0800 CST

Problemas de permissão ao excluir arquivos com a API do Google Drive em Ruby

  • 5

Eu tenho um script do Google Apps que cria arquivos json a partir de guias de planilhas:

function makeJSON() {
  var spreadsheetId = 'someId'; 
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheets = spreadsheet.getSheets();
  var urls = []; // Array to store the URLs of the created files

  for (var i =  1; i < sheets.length; i++) {
    var sheet = sheets[i];
    var data = sheet.getRange(3,  1, sheet.getLastRow() -  2, sheet.getLastColumn()).getValues();
    var headers = sheet.getRange(2,  1,  1, sheet.getLastColumn()).getValues()[0];

    var objects = data.map(function(row) {
    var obj = {};
    for (var j =  0; j < headers.length; j++) {
      //process data
    }
    
    return obj;
    });


     // Convert the array of objects to a JSON string
    var json = JSON.stringify(objects, null,  2);
    
    // Create a blob from the JSON string
    var blob = Utilities.newBlob(json, 'application/json', sheet.getName() + '.json');

    var folder = DriveApp.getFolderById('someId');
    var file = folder.createFile(blob);

    file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT); //I don't like making these publicly editable but it seems I'm forced to in order to be able to download/delete them via ruby script
    
    // Get the file ID
    var fileId = file.getId();
    
    // Construct the direct download URL
    var directDownloadUrl = "https://drive.google.com/uc?export=download&id=" + fileId;
    
    // Add the direct download URL to the array
    urls.push(directDownloadUrl);
    
  }
  return urls;
}

function doGet() {
  var urls = makeJSON(); // Call the function to generate JSON files and get their URLs
  return ContentService.createTextOutput(JSON.stringify({urls: urls})).setMimeType(ContentService.MimeType.JSON);
}

Eu tenho um script Ruby que baixa todos esses arquivos do Google Drive. Essa parte funciona. Mas também quero excluí-los após o download:

drive_service = Google::Apis::DriveV3::DriveService.new
scope = 'https://www.googleapis.com/auth/drive'

authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
  json_key_io: File.open('google_client.json'),
  scope: scope
)

authorizer.fetch_access_token!

# Set the authorization for the Drive API client
drive_service.authorization = authorizer

# URL of your deployed web app that returns JSON file URLs
web_app_url = 'https://script.google.com/macros/s/digits/exec'

# Fetch the JSON data from the web app
response = URI.open(web_app_url).read
json_data = JSON.parse(response)

# Directory to save the JSON files
save_directory = 'downloads'

# Ensure the directory exists
FileUtils.mkdir_p(save_directory) unless File.directory?(save_directory)

json_data['urls'].each do |url|
  # Extract the file ID from the URL
  file_id = url.split('id=')[1]
   
  # Fetch the file's metadata using the Google Drive API
  file_metadata = drive_service.get_file(file_id, fields: 'name')
   
  # Extract the file name
  file_name = file_metadata.name
   
  # Construct the direct download URL
  direct_download_url = "https://drive.google.com/uc?export=download&id=#{file_id}"
   
  # Construct the full path
  file_path = File.join(save_directory, file_name)
   
  # Download the file
  URI.open(direct_download_url) do |source|
    File.open(file_path, 'wb') do |file|
      file.write(source.read)
    end
  end
  puts "Saved #{file_name} to #{save_directory}"

  # Delete the file from Google Drive
  drive_service.delete_file(file_id) #THIS LINE THROWS THE ERROR
end

Aqui está o erro:

/Users/me/.rvm/gems/ruby-2.7.2/gems/google-apis-core-0.14.0/lib/google/apis/core/http_command.rb:244:in `check_status': insufficientFilePermissions: The user does not have sufficient permissions for this file. (Google::Apis::ClientError)

Acho que o problema é que no meu script Ruby as credenciais são da minha conta de serviço ( [email protected] ) e os arquivos no Google Drive são de propriedade de "Me" ( [email protected] ). Mas não consigo descobrir como torná-los propriedade da minha conta de serviço ou como executar o script com as credenciais normais da minha conta de e-mail. Quando você cria contas de serviço no console do Cloud, você é forçado a usar *.iam.gserviceaccount.comcontas.

A pasta do Google Drive é compartilhada com minha conta de serviço. Todos os arquivos nele contidos são de minha propriedade e minha conta de serviço tem permissões de editor em todos eles.

Dito isso, como posso excluir esses arquivos do Google Drive depois de baixá-los? Os arquivos se acumulam rapidamente e preciso manter esse diretório limpo.

  • 1 respostas
  • 27 Views
Martin Hope
soleil
Asked: 2024-02-18 02:45:01 +0800 CST

Predicado SwiftData quando um relacionamento é opcional

  • 5

Considere o seguinte relacionamento em SwiftData:

@Model
class Category: Decodable, Identifiable {
    var id: Int
    var title: String
    @Relationship var questions = [Question]() 
}

 @Model
 class Question: Decodable, Identifiable {
    var id: Int
    @Relationship var category: Category?
 }

O problema ocorre quando tento buscar todas as questões de uma categoria após salvá-las:

let catId = 7
let categoryPredicate = #Predicate<Category> { $0.id == catId }
let categoryDescriptor = FetchDescriptor(predicate: categoryPredicate)
let categories = try modelContext.fetch(categoryDescriptor)
if let cat = categories.first {
    cat.questions = parsedQuestions
}

//now try to fetch the questions out of the modelContext so they can be used and updated 
let questionPredicate = #Predicate<Question> { $0.category.id == catId } //THIS LINE THROWS THE ERRORS
let questionDescriptor = FetchDescriptor(predicate: questionPredicate)
            
do {
    questions = try modelContext.fetch(questionDescriptor)
} catch {
    fatalError("unable to find any questions for \(category.title)")
}

Eu recebo este conjunto de erros:

O parâmetro genérico 'ID' não pôde ser inferido
O método de instância de referência 'id' em 'Opcional' requer que 'Categoria' esteja em conformidade com 'Visualização'
Tipo '(ID) -> alguma Visualização' não pode estar em conformidade com 'BinaryInteger'

Como posso compor um predicado adequado sem erros neste caso?

swift
  • 1 respostas
  • 28 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve