Laden...

Laufschrift

Erstellt von alf468 vor 18 Jahren Letzter Beitrag vor 18 Jahren 4.825 Views
A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren
Laufschrift

Ich möchte gerne eine Art Laufschrift machen
Ein Text der von oben Mitte nach unten Mitte geht und dann soll sich der Text ändern
Das ganz soll dan 4 mal wiederholt werden nätürlich soll jeder Ablauf mit einem anderen Text sein

Ich habe da noch nicht die große Ahnung von aber ich möchte das gerne in mein Programm einbauen

PS:Kann man das auch so machen das sich etwas in "Sand" auflöst??

S
223 Beiträge seit 2005
vor 18 Jahren

Du kannst eine Direct3D-Schrift machen und diese in deiner OnPaint() (oder Render() ) Methode aufrufen:


private Microsoft.DirectX.Direct3D.Font font = null; 

...

// in InitalizeGraphics():
font = new Microsoft.DirectX.Direct3D.Font( device, new System.Drawing.Font ("Arial", 10.0f, FontStyle.Regular) );

...

// in Render:
font.DrawText(....)

...


Und dadurch, dass deine Schrift quasi permanent neu gezeichnet wird, kannst du sie auch laufend verändern (z.B. über eine Schleife die Position verändern, auflösen etc.). Die Änderungen sind fliessend, da der Bildschirm seeehr oft neu gezeichnet wird... g (es sei denn, der PC ist lahm) 😉

A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

Ich habe jetzt folgendes da stehen:

public class schrift : System.Windows.Forms.Form
	{
		/// <summary>
		/// Erforderliche Designervariable.
		/// </summary>
		private System.ComponentModel.Container components = null;
		private Microsoft.DirectX.Direct3D.Font font= null;
		Device device = null;
		Sprite sp=null;
		PresentParameters presentParams = new PresentParameters();
		public schrift()
		{
			//
			// Erforderlich für die Windows Form-Designerunterstützung
			//
			InitializeComponent();

			//
			// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
			//
		}

		/// <summary>
		/// Die verwendeten Ressourcen bereinigen.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Vom Windows Form-Designer generierter Code
		/// <summary>
		/// Erforderliche Methode für die Designerunterstützung. 
		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
		/// </summary>
		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
			this.Size = new System.Drawing.Size(300,300);
			this.Text = "schrift";
		}
		#endregion
		public bool InitializeGraphics()
		{
			try
			{
				presentParams.Windowed=true;
				presentParams.SwapEffect = SwapEffect.Discard;
				

				device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);

			
				sp=new Sprite(device);
				font=new Microsoft.DirectX.Direct3D.Font(device, new System.Drawing.Font ("Arial", 10.0f, FontStyle.Regular) );


				return true;
			}
			catch (DirectXException)
			{ 
				return false; 
			}
		}
		private void Render()
		{
			if (device == null) 
				return;


			//Clear the backbuffer to a blue color 
			device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
			//Begin the scene
			device.BeginScene();
			font.DrawText(sp,"Hallo",new System.Drawing.Point(2),4);
			
			device.EndScene();
			device.Present();
		}
		protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
		{
			this.Render(); 
		}
		static void Main() 
		{
			using (schrift frm = new schrift())
			{
				if (!frm.InitializeGraphics()) // Initialize Direct3D
				{
					MessageBox.Show("Could not initialize Direct3D.  This tutorial will exit.");
					return;
				}
				frm.Show();

				
				while(frm.Created)
				{
					frm.Render();
					Application.DoEvents();
				}
			}
		}

	}

Aber das einzige was kommt ist ein blauer Bildschirm 🙁

S
223 Beiträge seit 2005
vor 18 Jahren

Hi,
ich habe deinen Code mal ein klein wenig umgebaut, so läuft er zumindest (jedenfalls bei mir) 😁 :


using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace Schrift
{
	
	public class Schrift : System.Windows.Forms.Form
	{
        private Device device = null;        					
        private Microsoft.DirectX.Direct3D.Font font = null;        

		public Schrift()
		{			
			InitializeComponent();
            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
		}

        
        public void InitializeGraphics()
        {            
            PresentParameters presentParams = new PresentParameters();
            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;
            presentParams.AutoDepthStencilFormat = DepthFormat.D16;
            presentParams.EnableAutoDepthStencil = true;
            device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);                      
            font = new Microsoft.DirectX.Direct3D.Font( device, new System.Drawing.Font ("Arial", 14.0f, FontStyle.Regular) );           		
        }		           

        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0);
            device.BeginScene();
            font.DrawText(null, string.Format("Hallo"), new Rectangle(10,10,0,0), DrawTextFormat.NoClip, Color.White);
			device.EndScene();
            device.Present();
            this.Invalidate();
		}		

		#region Windows Form Designer generated code		
		private void InitializeComponent()
		{						
            this.Size = new System.Drawing.Size(300,300);
            this.Text = "schrift";	
		}
		#endregion

		
        static void Main() 
        {
            using (Schrift s = new Schrift())
            {               
                s.Show();
                s.InitializeGraphics();
                Application.Run(s);
            }
        }                                          
       
	}
}


A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

Danke das sieht doch schon mal nach was aus 🙂
Jetzt ist nur noch die Frage wie ich das zum "laufen" bekomme

S
223 Beiträge seit 2005
vor 18 Jahren

In dem du einfach immer deine Kameraeinstellungen veränderst, wo die X-, Y- und Z-Achse verlaufen dürfte die bekannt sein und das es eine Kameramatrix gibt, auch. Also einfach mal ausprobieren und drauflos skalieren etc. 👍