Advertisement

c# drawing sprites

Started by March 16, 2019 12:23 AM
55 comments, last by phil67rpg 5 years, 5 months ago

well your code looks  very similar to mine just with a few minor tweaks, I am getting better at my coding skills. sometimes I just need a little help.

your code is very close to what I want. I  really  liked the animation video.

Advertisement

I am still studying my book and doing the exercises, this chapter is on arrays, hopefully this will help in my coding. also I am still working on my coding problem as explained above.

I wrote this today for play while I'm testing something new (Esenthel) It's just a little sequence that runs during six seconds allowed for an intro screen in the works. It's crude and slightly different structure, but the idea is all there for a simple little thing. Check it out, maybe port it to your environment. (it's a good exercise, maybe make it better)


struct IntroContainer
{
   Vec2 pos;
   Vec2 accel;
   float radius = 0.1;   
   bool broken = false;
};

IntroContainer introContainer[5];

bool InitIntro()
{
   introContainer[0].pos   = {-0.5,  0.5};
   introContainer[0].accel = { 1.5,  1.0};
   introContainer[1].pos   = { 0.5,  0.3};
   introContainer[1].accel = {-1.5,  0.7};
   introContainer[2].pos   = {-0.7,  0.4};
   introContainer[2].accel = { 1.2,  0.9};
   introContainer[3].pos   = { 0.7,  0.4};
   introContainer[3].accel = {-1.2,  0.9};
   introContainer[4].pos   = {-1.0,  0.2};
   introContainer[4].accel = { 1.2, -1.4};
   return true;
}

void ShutIntro()
{
   
}

bool UpdateIntro()
{
   if(Time.stateTime()>6 || Kb.bp(KB_ESC)) // if active state (which here is 'StateIntro') is running for more than 3 seconds or escape pressed
      StateMenu.set(1.0);                  // then switch to 'StateMenu' state with 1.0 second smooth fading
      
      
   for( int id=0;  id<5;  id++)
   {
      introContainer[id].pos.y -= 0.001;
      introContainer[id].accel *= 0.99;
      introContainer[id].pos += introContainer[id].accel * 0.01;
            
      for(int other=0; other<5;  other++)
      {
         if(id == other) { continue; }
  
         // check against the other
         float distX = (introContainer[id].pos.x - introContainer[other].pos.x);
         float distY = (introContainer[id].pos.y - introContainer[other].pos.y);
         float dist  = Sqrt(distX*distX + distY * distY);
         if(dist < (introContainer[id].radius + introContainer[other].radius))
         {
            // collision (fake a reaction)
            introContainer[id].accel *= -0.4;
            introContainer[other].accel *= -0.4;
            introContainer[other].pos -= dist;
            introContainer[id].broken = true;
            introContainer[id].radius *= 0.7;
            introContainer[other].broken = true;
            introContainer[other].radius *= 0.7;
         }
      }   
   }
   return true;
}

// sloppy test variables
float c1y_modifier = -0.05; // add some variance
float c2y_modifier =  0.1;
bool toggle = false;
float textPosY = 0.2;
int textColor = 255;

void DrawIntro()
{
   D.clear(BLACK);
   
   // Fade out text
   TextStyleParams ts;
   ts.color = Color(textColor);
   D.text (ts,  0, textPosY-=0.001, "Goliath Forge Online");
   D.text(ts,  0,  textPosY - 0.08,  "My 2019 Games");
   textColor -= 1; if(textColor < 0) textColor = 0;
   // Run a simple ball simulation
   for(int id=0;  id<5;  id++)
   {
      if(introContainer[id].broken == true)
      {
         Circle(introContainer[id].radius,  introContainer[id].pos).draw(RED,  false);
         if(toggle)
            Circle(introContainer[id].radius,  introContainer[id].pos + Vec2(-0.14, c1y_modifier)).draw(RED,  false);
         else
            Circle(introContainer[id].radius,  introContainer[id].pos + Vec2(-0.14, c2y_modifier)).draw(RED,  false);
         c1y_modifier -= 0.001;
         c2y_modifier -= 0.002;
         introContainer[id].radius *= 0.99;
      }
      else
      {
         Circle(introContainer[id].radius,  introContainer[id].pos).draw(RED,  false);
      }
   } 
}

Circle is a build in drawing function in my environment, in this case not flood filled but red. Text is also a built in for me. 

Works fine on my machine. What am I doing wrong? Will it run the exact same on your machine? First thing I do when I update is look at something. But then never use it...Do you know what we're not scaling all this math by?

well that is some nice code, but it is a little beyond me at this time, that is why I am still studying c#

yes, of course. Good day.

Advertisement

thanks for all the help goliathforge, do you have any more helpful input?

I guess not. Thank you.

your welcome

well I know I am beating a dead horse but I really want to solve my problem, is there anything I can  do to remedy my situation?

This topic is closed to new replies.

Advertisement