Welcome Guest ( Log In | Register )

[ Big| Medium| Small] -



Post new topic Reply to topic  [ 11 posts ] 
    Tindy
  Thu Apr 12, 2012 2:21 pm
blahblahblah
User avatar
Sponsor


Location: Pittsburgh
Hello all,

I've jumped ship from RMXP and decided to try my hand at Construct. Unfortunately I'm extraordinarily behind the curve...

The game I'm trying to make at present is a Math Blasters-esque game, wherein one uses the keyboard to key in the correct sequence before the symbols crash into your base.

I've got the symbols to move across the screen (well, that's easy!), but...that's about it. I've already looked up how to randomly generate objects, but the tutorial I got isn't quite what I need. I have around 50 individual sprites that I'm working with, and I need them to be randomly generated and come across the screen at an (eventually) accelerated speed. The acceleration I'm pretty sure I can handle, it's just the generation that I need help with.

Can anybody help me? Thanks in advance <3

_________________
Image


Top Top
Profile      
 

    valkyriegames
  Thu Apr 12, 2012 3:18 pm
User avatar
Awesome Bro


Location: Australia
Wow 50 sprites is quite a lot. Well, you could save a random number from a Round(Random(1,50)) statement in to a local variable, and then have an If statement for each of the results.
ie
Every 5 seconds, number = Round(Random(1,50))
If(number=1), Spawn object1
object1.X = [some number]
object1.Y = [some number]
If(number=2), Spawn object2
object2.X = [some number]
object2.Y = [some number]
...
If(number=50), Spawn object50
object50.X = [some number]
object50.Y = [some number]

There may be a way to simplify it with families but I'm not sure because I've only been using the free version so far.

As a side note, acceleration can be easily handled by setting the acceleration value after giving an object the Bullet behaviour.

Hope that helps!

_________________
Image

Content Hidden


Image
Content Hidden


Top Top
Profile      
 

    onzephyr
  Thu Apr 12, 2012 4:08 pm
User avatar
Awesome Bro

I'm thinking there are a couple ways you could go about this. The first one that comes to mind is to turn all 50 individual sprites into one sprite, with either a 50 frame animation. Or if each sprite currently has it's own animations. then turn them into a single sprite with 50 animations.
That way you could have a single event, create the object and set the frame/animation based on either a variable or at random.
Giving you the ability use the sprites frame or animation name in other events to help with keying in the correct answer.

something like.

Every X seconds.
-------------------------> system create object "sprite" layer 0   x=0 y=0
-------------------------> sprite set frame =round(random(49))
------or by animation---->sprite set animation = str(round(random(49)))  play from beginning.
"if the animations were named 0-49
 
------or by animation---->sprite set animation = choose(Value, Value,Value,Value)
"if you have non sequential names for the animations".

and as an over simplified example of using the frame or animation with another event, say a key press
|keyboard on Num 1 pressed.| -------->Do Actions.
|sprite is onscreen |
|sprite frame =1] |

_________________
Image


Top Top
Profile      
 

    valkyriegames
  Thu Apr 12, 2012 5:09 pm
User avatar
Awesome Bro


Location: Australia
Oh actually that's a great idea onzephyr. I didn't even think of that. That's certainly a creative way of using animations! Wow, this would actually have been quite handy for the beats in Music Fighter. Another strategy under the belt. Cheers! :D

_________________
Image

Content Hidden


Image
Content Hidden


Top Top
Profile      
 

    Tindy
  Fri Apr 13, 2012 1:03 am
blahblahblah
User avatar
Sponsor


Location: Pittsburgh
Ooh, I didn't think about that. Thanks!

I actually did manage to get them to generate randomly - sort of - by simply putting in:

every random(1000) seconds create sprite

That's a lot of coding, though, since each sprite needs its own, individual line (or else they all parade through at once).

_________________
Image


Top Top
Profile      
 

    onzephyr
  Fri Apr 13, 2012 2:28 am
User avatar
Awesome Bro

One way to control the number of "sprites" that get created
you could create a event condition compairing the number of "sprite" objects and as long as it's smaller than whatever number you would like to be the max. Move on and create the sprite.

Something like this will work if all your "sprites" are a single object, like my first post. or if you are using families and all sprites belong to that family "family.count"
system sprite.count < 5
Every random(X) seconds
----------------------------------->system create sprite. x,y
----------------------------------->other actions to perform on sprite.


If all your sprites are independent I would suggest using a global variable in place of count to do the same thing. Then just have each sprite add to the variable on creation and subtract on being destoyed. you will also need a local variable to make sure that only one of the subevent sets fires Something like
[global number Variable1=0]
system variable1 < 5
Every random(X) seconds
other conditions for picking if needed
-------sub events
------[local number Variable2=0]
-------> other condition----->create sprite#1
---------------------------->system add 1 to Variable1
---------------------------->system set Variable2=1

------->Variable2=0, other conditions->create sprite#2
------------------------------------->system add 1 to Variable1
------------------------------------->system set Variable2=1


sprite#1 on destoryed---->system subtract 1 from Variable1
sprite#2 on destoryed---->system subtract 1 from Variable1

The second way needs more events, but does the same thing. The local variable will reset back to 0 with each tick , or loop

_________________
Image


Top Top
Profile      
 

    Tindy
  Fri Apr 13, 2012 3:40 am
blahblahblah
User avatar
Sponsor


Location: Pittsburgh
hey Onzephyr, new question

I tried both

sprite set frame =round(random(49)) and
sprite set animation = str(round(random(49))) play from beginning ,

but all they do is cycle through to the last frame of the animation. I can't figure out what I'm doing wrong. Any ideas?

_________________
Image


Top Top
Profile      
 

    onzephyr
  Fri Apr 13, 2012 4:49 am
User avatar
Awesome Bro

OOPS! Sorry I forgot to mention you will need to stop the animation for the example to work.

if you have a single sprite with a single 50 frame animation. and the goal is to set a frame and hold it. you can do it two ways. The easy way is to change the speed of the animation to 0 in the Animation dialog properties. "Left hand side menu while editing a sprites animations".
Image






The other way is to add and action after you create and set the frame number. I would suggest using this way , only if you have a reason to sometimes play the animation and sometimes not. Because this way you will have to use Sprite start Animation in some other event when you wish it to play.
Every X seconds.
-------------------------> system create object "sprite" layer 0 x=0 y=0
-------------------------> sprite set frame =round(random(49))
-------------------------> sprite stop animation



The above is also the answer if you are using 50 animations instead of frames. in that case i would suggest just using an action to turn off the animation. Mostly because my mind would go numb if I had to open and edit 50 animations just to change a speed variable. :wink:

_________________
Image


Top Top
Profile      
 

    Tindy
  Sat Apr 14, 2012 12:42 am
blahblahblah
User avatar
Sponsor


Location: Pittsburgh
It worked! Onzephyr, you're brilliant, thank you.

_________________
Image


Top Top
Profile      
 

    Tindy
  Wed Apr 18, 2012 4:52 am
blahblahblah
User avatar
Sponsor


Location: Pittsburgh
Hello, I hate asking for more help, but I have a feeling this won't be the last question... :(

The movement system works great (thanks, onzephyr!), but now I've run into another problem.

A few of my sprites only require one key to destroy them, for example, pressing the "A" button destroys one of them. However, most of them require two keys to destroy them - for example, "K" + "A".

I thought I could do it just by adding more than one condition, but it only allows for "Key pressed" and "Key Down," which...is workable, but not quite what I'm looking for.

Do I need to use a variable? ....how would I use a variable? >_>
One day I'll understand this engine...

_________________
Image


Top Top
Profile      
 

    onzephyr
  Wed Apr 18, 2012 6:00 am
User avatar
Awesome Bro

Yup you're going to have to give the sprites an instance variable.
Then set it at the same time you create it.
Set animation frame to --> 45 set sprite.variable-->45
something like that.

Then you're going to have to check it against some other object,
or variable to see if the player has the correct answer.
Here is a very basic example of what I mean.
For a full game it will need to be a bit more robust but it does
show the basic idea. Hope it helps.

Download example Textbox_input_sprite_destory.capx
Image

_________________
Image


Top Top
Profile      
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 11 posts ] 


Who is online

Users browsing this forum: No users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

We are an independent, not-for-profit game making community.
Homepage
Board Index
About Us
Downloadable Games
Free Browser Games
Games in Development
RPG Maker Support
Game Maker Support
Construct 2 Support
HBGames the eZine
Advanced RPG Maker
Site Announcements
Powered by phpBB © phpBB Group