none
programa não inicia RRS feed

  • Pergunta

  • eu sou muito curioso e muito fã de programação c#. pois bem, olá á todos!

    eu estou tentando criar um jogo com directx , e eu fiz uns testes e conseguir criar um codigo bem básico,

    que exibe uma tela directx e com uma cor azul. mas o meu programa não abre de jeito nenhum. me ajudem.vou postar meu código para vocês verem:

    using System.Drawing;
    using System.Windows.Forms;
    using Microsoft.DirectX;
    using Microsoft.DirectX.Direct3D;
    
    namespace DirectX3D_Version1
    {
       
        
        public partial class Form1 : Form
        { 
            //nossa variável global para este projeto
            Device device;
    
            public Form1()
            {
                //configura o tamanho inicial para nossa janela
                this.ClientSize = new System.Drawing.Size(640, 480);
    
                //e o titulo no nossa janela
                this.Text = "Direct3D Device";
    
                InitializeComponent();
            }
    
            public bool IniciaDispositivo()
            {
                try
                {
                     //agora configura nosso objeto D3D
                     PresentParameters presentParams = new PresentParameters();
                    presentParams.Windowed = true;
                    presentParams.SwapEffect = SwapEffect.Discard;
                    device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing,
                        presentParams);
                    return true;
                }
                catch(DirectXException)
                {
                    return false;
                }
    
               
    
    
            }
    
            public void Renderiza()
            {
                if (device == null)
                    return;
    
                //limpa o backbuffer com uma cor azul claro
                device.Clear(ClearFlags.Target, System.Drawing.Color.Aqua, 1.0f, 0);
    
                //começa a cena
                device.BeginScene();
    
                //renderização dos objetos podem acontecer aqui
    
                //fim da cena
                device.EndScene();
                device.Present();
            }
        }
    }

    using System;
    using System.Windows.Forms;
    
    namespace DirectX3D_Version1
    {
        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                using (Form1 frm = new Form1())
                {
                    if (!frm.IniciaDispositivo())
                    {
                        //Inicia o Dispositivo
                        MessageBox.Show("Não foi possível inicializar o Diretc3D. O programa fechará!!!");
                        return;
                    }
    
                    frm.Show(); // exibe o programa
                    while (frm.Created)
                    {
                        frm.Renderiza();  //renderiza
                        Application.DoEvents();
                    }
                }
            }
        }
    }

    desde já agradeco...


    Qual é o caminho para ser um bom programador?! Resp: Estudar, estudar e estudar...

    quarta-feira, 9 de dezembro de 2015 00:51

Respostas

  • Boa tarde.

    Flavio, reproduzi o erro aqui e identifiquei o problema (foi só debugar):

    Para corrigir isso foi bastante simples. Vá no teu App.config e faça isso:

    <startup useLegacyV2RuntimeActivationPolicy="true">

    E o problema está resolvido.


    Att., Rafael Simor

    • Sugerido como Resposta Marcos SJ segunda-feira, 14 de dezembro de 2015 16:38
    • Marcado como Resposta Marcos SJ quinta-feira, 24 de dezembro de 2015 12:22
    segunda-feira, 14 de dezembro de 2015 14:28

Todas as Respostas

  • Flavio Fonseca,

    Como assim ele não abre?

    Está ocorrendo algum erro?


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 9 de dezembro de 2015 13:51
  • erro de codigo não tem, meu código está correto. mas quando compila e eu vou na pasta onde ele está e tento abrir ele ele não abre. vem uma mensagem do windows falando que meu aplicativo parou de funcionar.

    Qual é o caminho para ser um bom programador?! Resp: Estudar, estudar e estudar...

    quarta-feira, 9 de dezembro de 2015 15:32
  • Boa tarde.

    Esta mensagem que o programa parou de funcionar provavelmente é uma exceção que não foi tratada.

    Acho que o problema esteja aqui:

    //configura o tamanho inicial para nossa janela
                this.ClientSize = new System.Drawing.Size(640, 480);
    
                //e o titulo no nossa janela
                this.Text = "Direct3D Device";
    
                InitializeComponent();
    Tente colocar o método InitializeComponent(); na primeira linha, antes das mudanças de valores.


    Att., Rafael Simor

    • Marcado como Resposta Marcos SJ quarta-feira, 9 de dezembro de 2015 17:15
    • Não Marcado como Resposta Marcos SJ quarta-feira, 9 de dezembro de 2015 17:15
    • Sugerido como Resposta Marcos SJ quarta-feira, 9 de dezembro de 2015 18:45
    • Não Sugerido como Resposta Marcos SJ quinta-feira, 10 de dezembro de 2015 18:36
    • Sugerido como Resposta Ggfa sábado, 26 de fevereiro de 2022 14:35
    quarta-feira, 9 de dezembro de 2015 16:19
  • SimorC,

    Quando isso ocorre não deveria apresentar uma mensagem de erro específica inclusive mostrando onde a exceção não tratada ocorre?


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 9 de dezembro de 2015 17:16
  • SimorC,

    Quando isso ocorre não deveria apresentar uma mensagem de erro específica inclusive mostrando onde a exceção não tratada ocorre?


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    Não quando ele tenta executar diretamente pelo executável gerado; de acordo com ele: "mas quando compila e eu vou na pasta onde ele está e tento abrir ele ele não abre. vem uma mensagem do windows falando que meu aplicativo parou de funcionar."

    Att., Rafael Simor

    quarta-feira, 9 de dezembro de 2015 17:23
  • simplesmente o programa não inicia!!! mas meu codigo compila perfeitamente sem erros ou warning!!!

    Qual é o caminho para ser um bom programador?! Resp: Estudar, estudar e estudar...

    quarta-feira, 9 de dezembro de 2015 18:18
  • simplesmente o programa não inicia!!! mas meu codigo compila perfeitamente sem erros ou warning!!!

    Qual é o caminho para ser um bom programador?! Resp: Estudar, estudar e estudar...

    Flávio, tentaste fazer o que sugeri?

            InitializeComponent();
    	//configura o tamanho inicial para nossa janela
            this.ClientSize = new System.Drawing.Size(640, 480);
    
            //e o titulo no nossa janela
            this.Text = "Direct3D Device";

    Att., Rafael Simor

    quinta-feira, 10 de dezembro de 2015 13:42
  • Já fiz. Eu não sei porque não abre o meu programa :(

    Qual é o caminho para ser um bom programador?! Resp: Estudar, estudar e estudar...

    quinta-feira, 10 de dezembro de 2015 18:11
  • Ainda acho que o problema seja no construtor; tente:

    try
    {
        InitializeComponent();
        //configura o tamanho inicial para nossa janela
        this.ClientSize = new System.Drawing.Size(640, 480);
    
        //e o titulo no nossa janela
        this.Text = "Direct3D Device";
    }
    catch(Exception ex)
    {
        MessageBox.Show("Erro: " + ex.Message);
    }

    Se não der certo, deixe seu Main() dentro de um try/catch também.

    Como falado anteriormente, tem alguma exceção não tratada que está causando a quebra do programa, porém ao abrir diretamente pelo executável ele simplesmente mostra que o programa parou de responder.


    Att., Rafael Simor

    quinta-feira, 10 de dezembro de 2015 18:33
  • Não acontece nada!

    Qual é o caminho para ser um bom programador?! Resp: Estudar, estudar e estudar...

    quinta-feira, 10 de dezembro de 2015 20:14
  • Ao fazer as mudanças tu estás buildando novamente, correto?

    Att., Rafael Simor

    quinta-feira, 10 de dezembro de 2015 20:24
  • Sim eu sempre quando mexo no código eu salvo e dou um build e carrego o programa. eu uso o visual studio 2015 e windows 8.1, mas eu até já parei de quebrar a cabeça neste projeto. cansei sabe?

    Qual é o caminho para ser um bom programador?! Resp: Estudar, estudar e estudar...

    quinta-feira, 10 de dezembro de 2015 23:34
  • Não desista, Flavio. :)

    Tente o seguinte, tira esse while:

                    while (frm.Created)
                    {
                        frm.Renderiza();  //renderiza
                        Application.DoEvents();
                    }

    Talvez esteja gerando um stack overflow aqui.

    Tente:

    - comentando totalmente o while;

    - somente deixando as duas linhas (frm.Renderiza(); e Application.DoEvents(););

    - e somente deixando a primeira/segunda linha, etc.

    Se tu não consegues debugar, vamos tentar isolar em qual parte do código o problema está sendo gerado.


    Att., Rafael Simor

    quinta-feira, 10 de dezembro de 2015 23:49
  • Tentei fazer isso que você falou, mas não está dando certo também.

    Qual é o caminho para ser um bom programador?! Resp: Estudar, estudar e estudar...

    sexta-feira, 11 de dezembro de 2015 16:17
  • Boa tarde.

    Flavio, reproduzi o erro aqui e identifiquei o problema (foi só debugar):

    Para corrigir isso foi bastante simples. Vá no teu App.config e faça isso:

    <startup useLegacyV2RuntimeActivationPolicy="true">

    E o problema está resolvido.


    Att., Rafael Simor

    • Sugerido como Resposta Marcos SJ segunda-feira, 14 de dezembro de 2015 16:38
    • Marcado como Resposta Marcos SJ quinta-feira, 24 de dezembro de 2015 12:22
    segunda-feira, 14 de dezembro de 2015 14:28
  • Boa noite.

    Conseguiste resolver o problema, Flavio?


    Att., Rafael Simor

    quarta-feira, 16 de dezembro de 2015 08:00
  • Bom dia,

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma thread nova.

    Atenciosamente

    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 24 de dezembro de 2015 12:22
  • Desculpa reviver essa mensagem

    Fiquei por três semanas tentando resolver esse mesmo problema, funcionava na minha maquina mas em outras não, após pesquisar muito "li quase o forum inteiro e tentar quase tudo oferecido" achei essa resposta:

    Tente colocar o método InitializeComponent(); na primeira linha, antes das mudanças de valores.

    No meu caso não era mudanças de valores mas uma única linha de código que vinha antes de "InitializeComponent()" rescrevendo em todos os Forms funcionou normalmente.

    Vs 2019, e mesmo compilado como AnyCPU roda tanto em 32 como 64.

    Obrigado

    sábado, 26 de fevereiro de 2022 14:34