j000rn Skrevet 3. oktober 2007 Del Skrevet 3. oktober 2007 Jeg har laget et wave synthesizer program.Have phun! 9605607[/snapback] (cos(x*x*50000)*0.2f + cos((sin(x*pi*5.5)*sin(cos(x*10)*cos(x )*1000) + cos(x ) ) * 10) * sin(x*20) + cos(sin(x*33)*50)*cos(x*133)*sin(cos(x*78)*40)) / 3 Lenke til kommentar
GeirGrusom Skrevet 3. oktober 2007 Forfatter Del Skrevet 3. oktober 2007 (endret) Vel, har oppdatert wavestudio litt, etter litt beta testing av Jørn (takker ), fant vi ut at det ikke var så veldig intuitivt. Dette er blitt endret, pluss at normalisering er lagt til, og det spiller ikke lenger noen rolle om man skriver store eller små bokstaver i uttrykk. OBS! Man må fortsatt skrive desimaltall med avsluttende "f" og med punktum, ikke komma. 0.5f - Riktig! 0.5 - Feil, dette er double 0,5 - Feil 0,5f - Feil Har også skrudd på igjen muligheten til å skrive wav filer Dette blir 48 KHz 16-bit mono filer, gidder ikke å endre på dette, men legger kanskje til støtte for 24-bit filer etterhvert. WaveStudio.zip Endret 3. oktober 2007 av GeirGrusom Lenke til kommentar
HDSoftware Skrevet 4. oktober 2007 Del Skrevet 4. oktober 2007 HAHA! Lyden til Jorn er jo helt genial! Hvordan kom du på den da? Lenke til kommentar
j000rn Skrevet 4. oktober 2007 Del Skrevet 4. oktober 2007 Vel, har oppdatert wavestudio litt, etter litt beta testing av Jørn (takker ), fant vi ut at det ikke var så veldig intuitivt. 9631442[/snapback] Jeg er ikke så veldig inteligent, så derfor må GUI'et være idiotsikkert..... Lenke til kommentar
j000rn Skrevet 4. oktober 2007 Del Skrevet 4. oktober 2007 HAHA! Lyden til Jorn er jo helt genial! Hvordan kom du på den da? 9632420[/snapback] Har sånn pipelyder inni hodet mitt hele tiden..., så å få dem "ned på papir" gikk ganske greit igrunn Lenke til kommentar
dahwan Skrevet 9. november 2007 Del Skrevet 9. november 2007 (endret) Hahahaha! nydelig kommentar. Nå har jeg en litt oppdatert versjon av framework/spill hvor jeg har lagt til flere modeller (men ikke rettet på stjernene enda ), samt at tekstur-filnavnet blir lest fra .3ds filen, istedet for at den var hardkodet.Det er også lagt til en lite vellykket kollidering, og at du kan skyte prosjektiler. Er det noen som har en litt mer velfungerende metode å få til kollidering på? edit: Jeg vil legge til at jeg nå også har fått til OpenAL og skal til å legge til dekoding av Ogg Vorbis for musikk, foreløpig leser den bare ukompimert wav (siden wav er et helvetes drittformat vil ikke alle wav filer du finner på harddisken eller nettet være støttet, rekkefølgen må være RIFF, WAVE "fmt " "data " og wFormatTag må være 1, og støtter 8 eller 16 bit, stereo eller mono) Men jeg har ikke uploaded dette, siden det er noen bugs og slikt enda. Kommer etterhvert. Herregud ! Jeg elsker deg ! Helt sykt ! Åssen klarte du å importere en 3ds fil til spillet ditt ? Dere folk er jo helt syk i programmering! Jeg har lagt med det eneste "spillet" jeg har klart å skrive. Ironisk nok er det også det første spillet jeg prøvde å skrive. Har også et program med en cube laget av customvertex med normaler og 3 lys. Cuben spinner sakte langs Y axis... Ikke så spennende akkurat, men veldig realistisk. 6 samples multi sampling. PS: string Dere_folk = Jorn79 + "\r\n" + GeirGrusom SPILLET: Dere legger sikkert merke til at når dere skalerer til fullskjerm går ballen tregere og tregere Dette gjorde jeg med vilje, for det gav følelsen av at ballen var en diger kampestein eller no sett langt vekke fra. Ganske artig å skalere vinduet opp/ned hehe. Ballen kan også trykkes på av venstre og høyre museknapp for å skifte farge 2D_game_01.zip Endret 9. november 2007 av dahwan Lenke til kommentar
GeirGrusom Skrevet 10. november 2007 Forfatter Del Skrevet 10. november 2007 Hehe Ikke så ille da, den fungerer jo som den skal (wasd fant jeg ut) selvom det ikke skjer så mye enda... Jeg har funnet ut at high resolution timer er den beste måten å få et spill til å gå "glatt" med. Hvis man sier at hver vector-unit er i pixels per sekund e.l. ligende kan man multiplisere med Instruksjoner / Instruksjoner_per_sekund (QueryPerformanceFrequency & QueryPerformanceTimer) 3ds er btw en temmelig simpelt format hvis du ser på det, samme med lwo, som er nesten identisk, untatt det IDIOTISKE padding byte saken som de driver med. Hva i helvete er grunnen til at en chunk må være oddetall i størrelse??!! fatter bare ikke hva noen tenker med innimellom. Lenke til kommentar
dahwan Skrevet 10. november 2007 Del Skrevet 10. november 2007 (endret) hehehe... Jeg har et stort problem med 3D programmering. DirectX eller ikke. Det jeg vet er at jeg trenger en "device" som er selve kjernen i game prorammering. Men problemet er jo at en device tar jo bare en modell eller en tekstur. Det er jo helt idiotisk. Jeg har lett lenge, leeeeenge etter en måte å få mer enn en modell inn i programmet mitt på. Foresten så har jeg heller ikke klart å importere en modell. Det eneste formatet som directX har en egen import "metode" på er .x, og det formatet kan ikke 3Ds max exportere =/ Må jeg da lade en egen device for hver ***** modell i hele spillet mitt? Det blir jo tusenvis av devicer, så jeg vet jo at det ikke er løsningen. Hvis du vet om en bra bok eller tutorial (eller din msn adresse) du kunne linket til meg hadde det vert utrolig hjelpende. Takk på forhånd =) Dahwan Endret 10. november 2007 av dahwan Lenke til kommentar
GeirGrusom Skrevet 11. november 2007 Forfatter Del Skrevet 11. november 2007 Ah hehe. Det er ikke noe problem. Du lager Direct3D devicen (som du beholder som en forholdsvis tilgjengelig variabel) Deretter kan du bruke import funksjonene til X for å importere en .x fil. For å importere f.eks. en 3ds fil må du først lese dokumentasjonen til .3ds file (som du finner på http://www.wotsit.org) deretter må du fylle in ett eller flere VertexBuffer objekter med dataene du får, og et eller flere IndexBuffer (dette er klasser i Direct3D, du kan sikkert bruke Mesh også) Devicen trenger du kun å lage én gang. Lenke til kommentar
dahwan Skrevet 12. november 2007 Del Skrevet 12. november 2007 Hva er indexbuffer til? Lenke til kommentar
Xipil Skrevet 13. november 2007 Del Skrevet 13. november 2007 (endret) Hva er indexbuffer til? Nå kan ikke jeg så mye om dette. Men jeg regner med at index buffer er en som indekserer opp i mot vertex bufferen. Sånn at du ikke trenger å fylle minne opp med vertex info. Siden du da ved hjelp av Index bufferen kan henvise til en vertex info flere ganger når du lager modellen din. Vertex info for noe i 3D består vel av en X, Y og Z verdi av typen float hvis jeg ikke tar feil og det tar vel mer plass i minnet en et integer tall i index bufferen. Endret 13. november 2007 av ialu Lenke til kommentar
dahwan Skrevet 13. november 2007 Del Skrevet 13. november 2007 Hmmm... Høres forferdelig vanskelig ut Jeg trenger virkelig noen tutorials , Lenke til kommentar
GeirGrusom Skrevet 23. november 2007 Forfatter Del Skrevet 23. november 2007 IndexBuffer er som ialu sier. Et buffer som indekserer vertices, så man kan bruke samme vertex flere ganger. f.eks. VertexBuffer { (0,23), (32, 44), (12, 66) } IndexBuffer { 0, 1, 2, 2, 0, 1 } Vil da tegne trekanter med vertex numrene {0, 1, 2} og {2, 0, 1} Lenke til kommentar
dahwan Skrevet 23. november 2007 Del Skrevet 23. november 2007 (endret) Av en eller annen grunn skjønner jeg nyaktig hva indexbuffer gjør nå, men ikke bæret av koden du sendte med Jeg ser bare to verdier i hver vertex Use code tags Endret 23. november 2007 av dahwan Lenke til kommentar
GeirGrusom Skrevet 23. november 2007 Forfatter Del Skrevet 23. november 2007 Jeg la bare to verdier i hver vertex som eksempel en modell er ikke nødvendigvis 3D vettu Men jeg skrev det opp som vanlig matematikk, så blir det ikke språkspesifikk. Lenke til kommentar
shadowano Skrevet 13. januar 2008 Del Skrevet 13. januar 2008 Så var det min tur å publisere mitt "første" program. Det er en screen shot applikasjon, som det finnes ganske mange av ute på nettet. Det denne derimot gjør er å ta bilde av skjermen og lagrer det som en jpg fil på disk som brukeren spesifiserer. Dette gjør det kjappere å få tak i selve bildet som du ønsker. Poenget er også å kunne ta flere screenshots hurtig etter hverandre. Funksjoner: Kan velge å ta screenshot av hele skjerm, hele skjerm minus taskbar eller kun aktivt vindu. Global hurtigtast er CTRL + F11. Kan sette opp en timer som gjør at programmet tar screenshots basert på intervall og lengde angitt av bruker. Mulighet for å avbryte timeren. Mapper som er åpne i programmet når du lukker lagres til en xml fil. Når starter programmet igjen så lese alle jpg bilder i mappene inn i programmet. Det er også implementert en watermarking av bildene. Sletting av filer i programmet, men får ikke lov å slette mappen den legger bildene i (sikkerhetshensyn så ikke bruker sletter f.eks c:) Sletting av filer på disk oppdateres i programmet live (ufikset bug oppdaget nettopp når du sletter mappen på disk). Vurderer også en egen global hurtigtast for screenshot av aktivt vindu (så man slipper å velge det i programmet). Men ikke funnet ut hvordan man registrerer flere hurtigtaster enda. Tar gjerne i mot kommentarer på alt siden det er mer eller mindre første applikasjonen min i C# PrintScreen.zip Lenke til kommentar
GeirGrusom Skrevet 14. januar 2008 Forfatter Del Skrevet 14. januar 2008 Fint program, men du har noen litt rare løsninger, spesielt på timer dialogen din. Bruk float.Parse istedet, og multipliser med 1000 for deretter å konvertere til int. Da kan brukeren skrive inn et hvilket som helst desimaltall, istedet for bare .25 og .5. Watermark kan du også rendre enklere med en stringformat og en rektangel istedet for å bruke MeasureString. Lenke til kommentar
GeirGrusom Skrevet 16. januar 2008 Forfatter Del Skrevet 16. januar 2008 (endret) Program for å tegne eletriske kretser edit: Fullversjon av programmet Printing og lagring fungerer nå, samt rotering etc. lagt til mange komponenter også (Dioider, transistor og logiske komponenter) batterier kan nå også være vekselstrømkilde. have phun ElectroShack.zip Endret 19. januar 2008 av GeirGrusom Lenke til kommentar
GeirGrusom Skrevet 23. januar 2008 Forfatter Del Skrevet 23. januar 2008 (endret) hmmm Har laget et IDE for D nå, det støtter debugging, og det har en autocomplete funksjon på imports (altså hvis du skriver import og mellomrom, så kommer den med en liste over hele Phobos biblioteket) OK! installasjonen på dette er ikke like enkel som med de andre programmene jeg har laget, så derfor en kjapp veivisning: - last ned IDE-en fra linken i posten ShowMeTheCode.zip - last ned dmd (D Compileren) fra http://ftp.digitalmars.com/dmd.1.026.zip - last ned dmc (linker og litt utils) fra http://ftp.digitalmars.com/dmc.zip - last ned D debugger fra http://ddbg.mainia.de/Ddbg-0.11.2-beta.zip fiks det gjerne slik at mappen til IDE-et inneholder dette: dm [dir] dmd [dir] ShowMeTheCode.exe ddbg.exe OK Vær oppmerksom på at programmet ikke fungerer skikkelig uten dmd, eller debuggeren. Programmet brukes som en teksteditor, det finnes en del bugs, men ingen kritiske som jeg vet om. debuggeren MÅ ligge i samme mappe som .exe filen til IDE-en. Hello World! i D: import std.stdio; int main(char[][] args) { writefln("Hello World!"); } Dokumentasjon til D finner man på Help->Documentation Det som kan være litt plundrete som jeg har sett, er at New lager et nytt prosjekt, Open, Save og Save As lagrer prosjektet. Når du trykker Build, lagrer den også alle filer. Den lagrer også automatisk et dokument om du lukker det. edit2: siden dette er tips og triks, kan jeg kanskje forklare hvordan jeg fikk til syntax highlighting. Syntax Highlighting Dette er RegEx-en som jeg bruker (\\/\\/\\/.*)|(\\/\\/.*)|(\'.*\')|(\".*\")|([ \\t{}():;,\\+\\-\\*\\/\\[\\]]) Altså den leter ette \\\ (som er dokumentasjon i D) // som er kommentarer deretter ser den etter tekst som starter med ' og slutter med ' og deretter " og " etter det skiller den ord med mellomrom tab {}():;,+-*/ og [] Så er det å bruke RegEx.Split funksjonen på en linje i RichTextEditor Bruk funksjonen LockWindowUpdate sålenge man endrer på teksten i richtextbox (dette gjør at vinduet ikke tegnes på nytt) Bruk SelectionColor, SelectedText for å dele det opp. Det som er best når man laster fila, er å laste hele fila inn i tekstboksen, og deretter tar SelectionStart = LinjeStar, SelectionLength = LinjeLengde, og deretter tar det derfra. Klikk for å se/fjerne innholdet nedenfor /// <summary> /// Updates syntax highlighting on line[index] /// </summary> /// <param name="index">Line index to update</param> public void UpdateLine(int index) { // If syntax highlighting is disabled, do not perform syntax highlighting if (!m_syntax_highlighting) return; // If index is out of bounds, return from function if (index < 0 || index >= Lines.Length) return; string line = Lines[index]; // Remember old selection index int sel_start = SelectionStart; // Start selection at line start SelectionStart = GetFirstCharIndexFromLine(index); // Select all text in the line, we will overwrite this line entirely SelectionLength = line.Length; // Split line into tokens using the regex pattern string[] tokens = Regex.Split(line); foreach (string token in tokens) { // Ignore empty tokens if (token != "") { if (token.Length > 1 && (token.StartsWith("\"") && token.EndsWith("\"")) || (token.StartsWith("'") && token.EndsWith("'"))) // String or character SelectionColor = Color.SlateBlue; else if (token.StartsWith("///")) // Documentation line SelectionColor = Color.DarkGray; else if (token.StartsWith("//")) // Commented line SelectionColor = Color.DarkGreen; else { SelectionColor = Color.Black; // This may be a keyword foreach (string s in keywords1) if (s == token) { SelectionColor = Color.Blue; break; } } // Insert token at cursor SelectedText = token; // Reset selection length SelectionLength = 0; } } // Retrieve old selection SelectionStart = sel_start; } Endret 25. januar 2008 av GeirGrusom Lenke til kommentar
GeirGrusom Skrevet 1. april 2008 Forfatter Del Skrevet 1. april 2008 Jeg skrev en kontroll for å legge til tabs i et program (som tabbed browsing) Plasser den på en MDI form så vil den fungere automatisk. Klikk for å se/fjerne innholdet nedenfor using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace HandyUserControls { public partial class WindowTabs : UserControl { private int m_button_width; private EventHandler m_mdi_activate; private List<IconCacheItem> m_icon_cache; [System.ComponentModel.DefaultValue(96)] public int TabWidth { get { return m_button_width; } set { m_button_width = value; } } public WindowTabs() { m_mdi_activate = new EventHandler(ParentForm_MdiChildActivate); m_button_width = 96; m_icon_cache = new List<IconCacheItem>(); InitializeComponent(); HScroll = true; VScroll = false; AutoScroll = false; } protected Bitmap GetBitmap(Icon icon) { foreach (IconCacheItem item in m_icon_cache) if (item.Icon == icon) return item.Bitmap; m_icon_cache.Add(new IconCacheItem(icon)); return m_icon_cache[m_icon_cache.Count - 1].Bitmap; } protected virtual Control CreateButton(Point pos, Form frm) { // Form is not one of the tabs, add it RadioButton chk = new RadioButton(); // Set the tag variable to point to form chk.Tag = frm; chk.CheckedChanged += new EventHandler(FormClick); chk.AutoEllipsis = true; chk.Text = frm.Text; chk.Location = pos; chk.Size = new Size(m_button_width, ClientSize.Height - System.Windows.Forms.SystemInformation.HorizontalScrollBarHeight); chk.Appearance = Appearance.Button; chk.FlatStyle = FlatStyle.Popup; chk.Image = GetBitmap(frm.Icon); chk.ImageAlign = ContentAlignment.TopLeft; chk.TextImageRelation = TextImageRelation.ImageBeforeText; chk.TextAlign = ContentAlignment.MiddleLeft; return chk; } public void UpdateTabs() { List<RadioButton> removes = new List<RadioButton>(); // Add buttons that should be removed to temporary list foreach(RadioButton btn in Controls) // Check if form associated with button is in the MDI children list if (Array.Find<Form>(ParentForm.MdiChildren, delegate (Form f) { return f == (btn.Tag as Form); }) == null) removes.Add(btn); // Remove items removes.ForEach(delegate(RadioButton rem) { Controls.Remove(rem); }); // Clear remove list removes.Clear(); int x = 0; foreach(Form frm in ParentForm.MdiChildren) { bool found = false; // Search for form in buttons foreach(RadioButton btn in Controls) { if(btn.Tag as Form == frm) { btn.Location = new Point(x, 0); found = true; break; } } if(!found) { Controls.Add(CreateButton(new Point(x, 0), frm)); } x += m_button_width + 4; } foreach (RadioButton btn in Controls) if ((btn.Tag as Form) == ParentForm.ActiveMdiChild) btn.Checked = true; } protected void FormClick(object sender, EventArgs e) { RadioButton btn = sender as RadioButton; if (btn.Checked && (ParentForm.ActiveMdiChild != btn.Tag as Form)) (btn.Tag as Form).Activate(); } protected override void OnParentChanged(EventArgs e) { base.OnParentChanged(e); if (ParentForm != null) ParentForm.MdiChildActivate += m_mdi_activate; } void ParentForm_MdiChildActivate(object sender, EventArgs e) { UpdateTabs(); } } public struct IconCacheItem { private Icon m_icon; private Bitmap m_bitmap; public Icon Icon { get { return m_icon; } } public Bitmap Bitmap { get { return m_bitmap; } } public IconCacheItem(Icon icon) { m_icon = icon; m_bitmap = icon.ToBitmap(); } } } Og den ser slik ut i programmet den brukes i: Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå