Obs Proj TWO, the Final Stretch [um, Prototype]

Posted on October 28, 2005 at 02:19 PM by sj695

Although the drum trigger was working, it was not giving us reliable results. As suggested in class we decided to work in parallel. We ultimately wanted two working paddles, so we decided to have one hooked up to a midi synth box and the other one using the Sonia sound library in Processing.

I am not taking ICM so I had never used Processing before. Dan Shiffman's book draft was invaluable in getting me up to speed, but soon realized that sound was not Processing's forte. At the end of the day I got Daniel to come by and take a look at my code and even he couldn't figure out why it wasn't working!

So I ditched Sonia for the time being and got the midi synth box from the ER. I got some simple tones to play with the paddle. Going back to my days of playing flute I got the paddles to play Salt 'n Peppa's "Push It".

DEFINE OSC 20
DEFINE HSER_RCSTA 90h ' enable the receive register
DEFINE HSER_TXSTA 20h ' enable the transmit register
DEFINE HSER_BAUD 31250 ' set the baud rate

TRISD = %00000000 'Set all of PORTD pins to output mode

paddleVar VAR word 'Create variable to store result
pitch var byte(12)

i var byte
i=0

' ranges for reference
pitch(0) = 60' mid c
pitch(1) = 61' c#
pitch(2) = 62' d
pitch(3) = 63' d#
pitch(4) = 64' e
pitch(5) = 65' f
pitch(6) = 66' f#
pitch(7) = 67' g
pitch(8) = 68' g#
pitch(9) = 69' a
pitch(10) = 70' a#
pitch(11) = 71' b


' a,e,d,c,b,g,g,b,c,b,g - salt n peppa push it!
'69,64,62,60,71,67,67,71,60,71,67
song var byte(11)
song(0)=69
song(1)=64
song(2)=62
song(3)=60
song(4)=71
song(5)=67
song(6)=67
song(7)=71
song(8)=60
song(9)=71
song(10)=67

'light debug sequence
high PORTD.0
pause 200
low PORTD.0

high PORTD.1
PAUSE 200
low PORTD.1

main:
ADCIN 3, paddleVar 'coming in at analog port 3

if paddleVar > 100 THEN 'set to 100 since slight vibrations give off readings
hserout [$90, pitch(i),$40]
if(i>11) then 'loop thru song once its at end reset to 0 o
i=0
ELSE
i=i+1
ENDIF
ENDIF

PAUSE 100

goto main

*One thing to remember, when working with the midi box, you need a 20 hz clock and when you program the chip you have to change the oscillator from XT to HS.

ConstructionWOES
On the sensor/paddle side, Steve ran into Danny Tsang [who had done a similiar project for a class] and he told us a better way to rig the paddles. Steve stripped a piezo speaker and took out the piezo film inside, carefully soldered the connections.

We hollowed out the paddle handle, ran wires through it and glued the pieces back on.

Steve used Gorilla Glue, which takes about 3 hours to dry. BUT the glue expands which fixes the sensor into place. [pic here]

We got some code that handled the sensor peak readings and luckily got Sonia to work at the last minute.

' Define ADCIN parameters
DEFINE ADC_BITS 10 ' Set number of bits in result
DEFINE ADC_CLOCK 3 ' Set clock source (3=rc)
DEFINE ADC_SAMPLEUS 20 ' Set sampling time in uS

PeakValue var word
SensorValue var word
LastSensorValue var word
Threshold var word
Noise var word
PingPong VAR WORD

PingPong = 420

' serial pins and data reate:
tx var portc.6
rx var portc.7
n9600 con 16468

Threshold = 50 ' set your own value based on your sensors
PeakValue = 0 ' initialize peakValue
noise = 5 ' set a noise value based on your particular sensor

' Set PORTA to all input
TRISA = %11111111
' Set up ADCON1
ADCON1 = %10000010

Main:
' read sensor on pin RA0:
ADCin 3, sensorValue

' check to see that it's above the threshold:
If sensorValue >= threshold + noise then
' if it's greater than the last reading,
' then make it our current peak:
If sensorValue >= lastSensorValue + Noise then
PeakValue = sensorValue
endif
' if the sensorValue is not above the threshold,
' then the last peak value we got would be the actual peak:
Else
If peakValue >= threshold then

' this is the final peak value; take action
'serout2 tx, n9600, ["peak reading", DEC peakValue, 13,10]
'serout2 tx, n9600, [DEC peakValue]
serout2 tx, n9600, [DEC pingPong]
endif

' reset peakValue, since we've finished with this peak:
peakValue = 0
Endif

' store the current sensor value for the next loop:
lastSensorValue = sensorValue
Goto main

//PROCESSING CODE FOR SOUNDS

import pitaru.sonia_v2_9.*;
import processing.serial.*;

/*avani added, put sounds in array, sounds should reside in same folder as .pde file */
String[] wavArray = {"first.wav", "second.wav","third.wav"};// new String[3];

//end avani additions
int bgcolor; // background color
int fgcolor; // fill color
Serial port; // the serial port
int[] serialInArray = new int[3]; // where we'll put what we receive
int serialPong = 0;
int serialCount = 0; // a count of how many bytes we receive

boolean firstContact = false; // whether we've heard from the microcontroller
int j=0; //wavs index
Sample bounce;

void setup() {
size(256, 256); // stage size
noStroke(); // no border on the next thing drawn

// print a list of the serial ports, for debugging purposes:
println(Serial.list());

port = new Serial(this, Serial.list()[0], 9600);
//port.write(65); // send a capital A to start the microcontroller sending
Sonia.start(this); // Start Sonia engine.

}

void draw() {
background(bgcolor);
fill(fgcolor);
// get any new serial data:
while (port.available() > 0) {
serialEvent();
// note that we heard from the microntroller:
firstContact = true;
}
}

void serialEvent() {
processByte((char)port.read());
}

void processByte(char inByte) {
// add the latest byte from the serial port to array:
serialInArray[serialCount] = inByte;
serialCount++;

// if we have 3 bytes:
if (serialCount > 2 ) {
bounce = new Sample(wavArray[j]);
serialPong = (int)serialInArray[0];
println(serialPong);

if (serialPong == 52) {
bounce.play();
j++;
if (j>2) { j=0;}
} serialCount = 0;
}
}

// Safely close the sound engine upon Browser shutdown.
public void stop(){
Sonia.stop();
super.stop();
}

[processing code here]

We constructed two Radio Shack project boxes in order to keep the components in place when the user swings the paddle.

So without further ado....see the project in action! That's right! Click here

Lots of fun was had.

icon 0 Comments

Paddle with peizo sensor

Posted on October 26, 2005 at 02:21 AM by sj695

IMG_0227.jpg

icon 0 Comments

Paddle with Pressure sensor

Posted on October 26, 2005 at 02:20 AM by sj695

IMG_0225.jpg

icon 0 Comments

Paddle with drim trigger.

Posted on October 26, 2005 at 02:18 AM by sj695

IMG_0224.jpg

icon 0 Comments

If it ain't got that swing...

Posted on October 23, 2005 at 02:05 AM by sj695

As part of our ongoing second project, I built two more prototypes to evaluate different sensors. The two sensor used were Piezo vibration (DigiKey #MSP1007-ND), and Force (DigiKey #102-1214-ND).

The Force sensor seemed to hold a lot of promise, as we were trying to sense when the ball is struck by a paddle. After all, that’s the focus of the project: to get the input of ball hitting paddle to create output as some other signal. For prototyping purposes, I just programmed an LED to light as my output.

Initially I peeled back the rubber pad on one side of the paddle and slipped the Sensor underneath it, and replaced the pad. This would have been a perfect solution because it was clean and tidy, but proved to be insufficient. The rubber pad dampened the collision force, and the readings were weak and sparse. If you didn’t hit the ball exactly where the sensor was or within close proximity, you got not reading at all.

For the second attempt, the sensor was placed on top of the rubber pad, and then covered with a stiff membrane (chipboard). This worked much better; no matter where you hit the ball with the paddle, the force was transferred to the sensor. We got plenty of useful readings from the sensor but the team felt that having to put the covering over it detracted too much from the original look and feel of the paddle.



On to Piezo

I was surprised when the Piezo sensors arrived because they were miniaturized versions of the Flex sensor accelerometer that I built a week ago. Working quickly, I designed a third prototype by taping the Piezo sensor to the paddle. These sensors worked fantastically, giving off tons of data. Too much so, in fact. The sensors are so sensitive that just holding the paddle steady, there’s enough vibration in your hand (time to switch to decaf?) to send a steady stream of data out to the PIC.

The challenge then was to develop a filter in the software that would only pass on a signal when the paddle struck the ball, not merely the slightest vibration or wiggle. The raw numbers coming in from the paddle ranged from 30 to 650. Tapping a ball with the paddle produced numbers from 400 to 600. The next step was to set up a filter that would knock out anything under what we thought a ball/paddle collision would produce. This presented a problem because the force of the ball hitting the paddle is always different, therefore it is never consistent. So if we set the filter to eliminate any numbers under say 350, just holding the paddle wouldn’t produce any signal. This seemed to work fine however once a ball was struck, we would then get multiple signals. After analysis, we determined that the problem was produced by the sensor continuing to reverberate after the paddle struck the ball. For instance, if a collision produced a reading of 425, we would then get a slowly descending string of readings from 425 down, until we hit the filter at 350.

To rectify this problem we introduced a new variable into the software that would represent the initial reading of a collision (the highest). We then used this reading as our cut-off point in the filter. After a set amount of time, the filter would be reset to a lower setting in anticipation of the next swing of the paddle. This produced much better results and only one output signal per collision. Unfortunately, the force of swinging the paddle sometimes was great enough to trigger the sensor as well. Much like the Flex sensor accelerometer I developed for my last prototype!

I felt that this could be interesting in our project, for we could create an event that happens when you swing the paddle and another one when the paddle collides with the ball. Sadly, my teammates were skeptical of the sensor protruding from the backside of the paddle and voted to go with the Drum trigger.



Here's the code:


Spacer = 0

Threshold = 300

main:

High PORTD.1

pause 100

Low PORTD.1

ADCIN 0, ADCvar ' Read channel 0 to adval

If ((ADCvar/2) > Threshold) then

serout2 PORTC.6, 16468, [DEC ADCvar/2, 13, 10] ' print it to serial out,

pause 250 ' with linefeed and carriage return (10, 13)

Spacer = 1

endif

IF (Spacer = 1) then

High PORTD.2

Pause 100

Low PORTD.2

Spacer = 0

Threshold = ADCvar

ENDIF

if (ADCvar/2 < 200) then

Threshold = 300

endif

icon 0 Comments

Observation Project TWO, it's Analog, it's digital....it ANALOG!

Posted on October 22, 2005 at 02:00 AM by sj695

Steven decided to strip the drum trigger to see what was inside. He found piezo film which basically senses vibration. We rigged the paddle so that the film was placed inside a groove cut for it near the bottom of the paddle. It picked up the vibration and so we figured out YES the drum trigger is analog. Oh and when the vibration was sensed, the LED in Santa's mouth lit up! "Ping Pong, Santa's ON."

icon 0 Comments

PComp Assignment 6

Posted on October 20, 2005 at 11:22 PM by sj695

Bought my motor have not completed this lab because I haven't been able to find a H-Bridge.

ICM Week 4 Assignment: Animate Array of Objects 2

Posted on October 17, 2005 at 03:31 PM by sj695

Using arrays and loops have a simple drawing/object move around or appear in some decorative pattern.

* Please Note this is example comes from Dan Shiffman's examples

Source code: bouncingball & Ball

ICM Week 4 Assignment: Animate Array of Objects

Posted on October 17, 2005 at 03:15 PM by sj695

Now that your creature is an object. Make an array of your creature, with each element move independently. Add some additional functionality or interaction.

Source code: anim_train_object_array

Observation Project TWO, Phase II

Posted on October 16, 2005 at 02:02 AM by sj695

We convened and decided to each take a paddle and try out different sensors. We all ended up in the lab at the same time and worked from one board, each testing after another.

Conclusions and findings:

- Drum trigger is digital NOT analog. Had to be hit at a specific pt and not big enough to cover surface area of paddle.

- Flex sensor. Idea was to attach multiple flex sensors to a paddle. Only flex sensor detects when a tennis ball hits it but the range of values is small, very similiar to values when just moving paddle. We tried a various of resistors but this just dropped the values from 900 to 200, but the overall number range stayed the same. After three different flex sensors and no consistent results we decided to try some Piezos.



icon 0 Comments

PComp Assignment 5

Posted on October 13, 2005 at 11:17 PM by sj695

This week we are sending and recieving data to Processing via the serial port. In this lab i moved a circle around the screen with a potentiometer. Here's the code:

-- Processing CODE --

/* Serial call-and-response
by Tom Igoe (with adjustments by Dano)

Sends a byte out the serial port, and reads 3 bytes in.
Sets foreground color, xpos, and ypos of a circle onstage
using the values returned from the serial port

Updated October 12, 2004
*/

import processing.serial.*;

Serial myPort; // The serial port

int redNess = 255; // fill color
int[] serialStuff= new int[3];; //where we keep all the incoming stuff
int serialCount = 0; // a count of how many bytes we receive
int xpos= width/2;; // Starting position of the ball
int shape =65;

void setup() {
size(255, 255); // stage size
noStroke(); // no border on the next thing drawn
myPort = new Serial(this, Serial.list()[0], 9600);
serialWrite(65); // send a capital A to start the MC sending
}

void draw() {
background(0);
fill(redNess,0,0);
// Draw the shape
if (shape==65){ //switch value is 65 or 66 (I added 65 to the normal values 0 and 1)
ellipse(xpos, 100, 50, 50);
}else{
rect(xpos,100,50,50);
}
}

void serialEvent() { //this function gets called when something happens involving the serial port

//serial is a special variable provided by processing to give you the oldest byte waiting to be read
// add the latest byte from the serial port into the correct slot in your byte array
serialStuff[serialCount] = myPort.read();
serialCount++;

// if we have 3 bytes, parse the string:
if (serialCount> 2 ) {
redNess = 2* serialStuff[0];
xpos = serialStuff[1];
shape = serialStuff[2];

// after you got them all, go back to putting the bytes in the first slot in the array again
serialCount = 0;
// get a number between 0 to 255 for the mouseX
//if your stage is bigger than 255 //int mouseXIn0to255 = 255*mouseX/width
//send out the mouseX to postion the servo motor
myPort.write(mouseX);
}
}

-- PIC BASIC CODE --

DEFINE OSC 4

DEFINE ADC_BITS 8
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEuS 20

lightVar var byte
potVaR VAR BYTE
switchVar var byte
inByte var byte

input portb.7

main:
switchVar = portb.7 + 65 //make it readable
adcin 0, potvar
adcin 2, lightvar
serout2 portc.6, 16468, [lightVar,potVar,switchVar]
serin2 portc.7, 16468, [inbyte]
Pulsout portd.0, inByte
PAUSE 10

goto main

Re: The Future of Micro Payment Systems

Posted on October 10, 2005 at 09:25 PM by sj695

After reading both articles by Clay Shirky and Scott McCloud, I would side with Clay on the topic of the future of micropayment systems. I’m not siding in this direction because Clay is a professor here at ITP, but because I agree with him on many points. As the future of the web is much clearer today than it was in 2003, especially with coming of the Web 2.0 era, it is obvious tomorrow’s web, I mean today’s web, is one where it’s core relies on the user and the user’s ability to exchange and connect with content of the internet. Although I side with Clay on this argument, especially when it comes to informational based content like news, essays and any other form of written word, I do believe there is a little hope for Scott’s bitpass.

That hope relies on the type of content that will be available through the micropayment systems. Content like articles, essays and etc will not do well, but content like music, videos and maybe software have some chance for success. But at the same time those types of content would do well if they are not of the recurring type, anything that is episode based or recurring. I believe consumers of that type of content would prefer a subscription-based model; they would feel the cost of the transaction each time they would view the latest content or episode.

The bitpass model should also consider some type of flex pricing that allows the user to pay more if they feel like or just the base price, since most of it’s sellers are small and independent. I think this may eliminate the mental cost of the transaction a little. It seems a person is more likely to give than is to purchase when it comes to the web, this system would be more along the lines of micropayment extension of PayPal.

Clay Shirky's Fame versus Fortune and Scout McCloud's response

icon 0 Comments

Re: The Grey Album

Posted on October 10, 2005 at 08:17 PM by sj695

I sat for a few days trying to ponder in my mind what was legally wrong with Danger Mouse mashing up the Jay-Z’s Black Album and the Beatles White album. Was Danger Mouse selling copies of the album on the Internet? Was the album so much like the originals it seemed as if he was allowing others to freely download original versions of the music? The answer to all of the above is NO. When did art become a crime? Is the record industry so out of touch with consumers they can’t see that this was nothing more than a form of creative expression? This is interesting because mash ups have been around for a long time. I remember as a kid listening to the radio and the D.J. would mash up things like Michael Jackson and RUN DMC.

I look forward to the day when artist will no longer be dependent on big music labels. Maybe indie bands can looking to blogging to figure a filtering system of what’s considered good music and what’s considered garbage. With a million blogs on the web, users have no problem discovering and finding what they like and don’t like. And maybe like the bloggers they can also figure out a way to make money from music they distribute on the web.

The story of DJ Danger Mouse's "The Grey Album"

Re: Podcasting

Posted on October 10, 2005 at 07:25 PM by sj695

WHOA!

Yahoo has just launched their podcasting service. This phenomenom came out of no where. Just a few months ago I recall reading about this new type of web content but never thought much of it, it’s just people with regulary update mp3 shows. At the time I heard the creator of Blogger was working on a online podcast search service call Odeo and then BAM Apple anounced they are integrating podcast into the iTunes Music store. Within weeks podcast had become as main blogging and now with the introduction of Yahoo into the fray it will be very interesting to see how this technology morphs in the coming weeks, months and years. And I must admit it is nice to have free, frequently updated audio content to listen to on my ipod.

Wikipedia’s definition of Podcasting

Podcasting is a method of publishing audio and video programs via the Internet, allowing users to subscribe to a feed of new files (usually MP3s). It became popular in late 2004, largely due to automatic downloading of audio onto portable players or personal computers.

Podcasting is distinct from other types of online media delivery because of its subscription model, which uses a feed (such as RSS or Atom) to deliver an enclosed file. Podcasting enables independent producers to create self-published, syndicated "radio shows," and gives broadcast radio programs a new distribution method. Listeners may subscribe to feeds using "podcatching" software (a type of aggregator), which periodically checks for and downloads new content automatically.

Most podcatching software enables the user to copy podcasts to portable music players. Any digital audio player or computer with audio-playing software can play podcasts. From the earliest RSS-enclosure tests, feeds have been used to deliver video files as well as audio. By 2005 some aggregators and mobile devices could receive and play video, but the "podcast" name remained most associated with audio.

"Podcasting" is a portmanteau word that combines the words "broadcasting" and "iPod." The term can be misleading since neither podcasting nor listening to podcasts requires an iPod or any portable player. Aware of that misleading association from the beginning, some writers have suggested alternative names or reinterpretations of the letters "p-o-d", without winning much of a following.[1] Another little-used alternative is "blogcasting", which implies content based on, or similar in format to, blogs.

icon 0 Comments

Re: MGM v. Grokster

Posted on October 10, 2005 at 06:49 PM by sj695

“As we noted in our arguments before the Ninth Circuit, the case raises a question of critical importance at the border between copyright and innovation: When should the distributor of a multi-purpose tool be held liable for the infringements that may be committed by end-users of the tool?”

Well, as everyone knows most users of peer-to-peer filesharing use such software to find and exchange copyrighted material.

“The Supreme Court's landmark decision in Sony Corporation of America v. Universal City Studios, Inc. (a.k.a. the "Sony Betamax ruling") held that a distributor cannot be held liable for users' infringement so long as the tool is capable of substantial noninfringing uses.”

Most users of the betamax who did copy copyrighted materials did so for personal usage. Unlike the betamax, filesharing services users exchange copyrighted materials through the internet with users all over the world.

While i do think cases like this hamper technological innovations, they do have a valid point concerning the usage of such technologies that limits their revenue stream. They are in the business to make money.

MGM versus Grokster: Electronic Frontier Foundation's position

Observation Project Questions about Ping Pong

Posted on October 06, 2005 at 11:47 PM by sj695

What tool or device is the action taken on?
Ping pong paddle, table and ball

What is the goal of the activity?
To hit the ping pong ball across the table with the paddle and repeat as the other player does the same actions

What are the physical parameters of the activity?
Seeing the ball, swing the paddle, positioning the body.

What does the person engaged in it do with their arms, their legs, their hands or feet, their head?
Move arms to swing and reach ball as it enters their side of table. The person may also have to jump or move from different sides of the table to reach or hit the ball.

How do they change their posture?
Sometimes the person may have to bend to reach balls that land closer to the center of the table (the net)

Where do they need to focus their attention?
The ball, speed, direction, angle of approach and anticipated bounce.

Is there a secondary focus of attention (for example, if two limbs are used independently)?
Angle of their paddle and body position

What physical elements of the activity make it engaging?
Sound, returning the ball to your opponent.

What elements make it difficult, painful, or boring?
Repetitive, anticipating ball landing, speed and bounce

icon 0 Comments

PComp Assignment 4

Posted on October 06, 2005 at 10:55 PM by sj695

It's amazing how much we're learning in PComp. We're in week 4 and programing a computer chip to control a servo. So this week we're programming a pic chip to control a servo with a potentiometer. Each week I feel like a painter learning how to create more colors. Here's the code:

DEFINE OSC 4
start:

INCLUDE "modedefs.bas"

' Define ADCIN parameters

' Set number of bits in result
DEFINE ADC_BITS 10

' Set clock source (3=rc)
DEFINE ADC_CLOCK 3

' Set sampling time in microseconds
DEFINE ADC_SAMPLEUS 10

' Set PORTA to all input
TRISA = %11111111

' Set up ADCON1 analog and right justify the result
adcon1 = %10000010

'define adc vars
adcVar0 VAR WORD 'Create variable to store result

'set a var for the pulsewidth- this tells the motor where to go
pulseWidth var byte

'thes values can be vary with different motors
minPulse CON 75
maxPulse CON 250
refreshPeriod CON 20


main:

'read adc data
ADCIN 0, adcVar0

'message the numbers so the value from the potentiometer matches the max and min of the servo
adcVar0 = (adcVar0/4) + 75

if adcVar0 >= 250 then
adcVar0 = 250
else
adcVar0= adcVar0
endif

'assign pulseWidth to the position of the potentiometer
pulseWidth = adcVar0

'set the pin low
low PORTC.3

'pulse the pin
PulsOut PORTC.3, pulseWidth

'pause
pause refreshPeriod
GOTO main

Observation Project Video of Ping Pong

Posted on October 06, 2005 at 06:59 PM by sj695

Ping Pong CLIPS

Observation Project Video of Ping Pong

icon 0 Comments

Photoshop Layering Homework

Posted on October 05, 2005 at 09:47 AM by sj695

comlab-photoshop-blog.jpg

Create a single image which contains 3-5 disparate elements which are combined to create a convincing new whole (i.e. opposing/contrary background and foreground elements, matched pieces to create a new single element, etc.) Upload to your class site. Bring psd file with layers to class.

Download Photoshop File

Physical Computing - whole new world

Posted on October 03, 2005 at 05:49 PM by sj695

Currently my main focus this semester is Physical computing. I feel like I am currently at a point where I can begin to put things together. The sense of confidence became more evident during the physical computing/processing demo today in Intro Computational Media. So tonite I'll spend sometime trying to master what i've learned thus far in Physical Computing so that I can easily excute what ever ideas I come of with. I know for a fact I'll have to start praticing soldering, that's whats i'm currently spending the most time on.

Gotta go,
Steve

10/03/2005 - ICM Class Notes

Posted on October 03, 2005 at 04:17 PM by sj695

Arrays

How to create a array

blank array with 5 slots
int[] mynum = new int[5]

or

array with 5 preset slots
int() mynum = {5, 8, 9, 10, 12}

Accessing a array
int a;

a = mynum(2)

a will then equal 9 because it is looking for the number 2 slot of the array (arrays start at 0)

Updating a array slot
mynum(0) = int(random(20));
mynum(1) = int(random(20));
mynum(2) = ......

Example mouseover using array: http://itp.nyu.edu/ICM/nancy/week4/rainbow

INTERATIONs

While {
....
....
}

for (int i=0, i< myNumLength, i++) {
   myNum(i) = random(20);
}

REALLY COOL EXAMPLE HERE: http://itp.nyu.edu/ICM/nancy/week4/rainbows


Processing and Physical Computing

- To much information, like everything related to Physical Computing i'll be spending hours in the lab learning this.

** NOTE TO SELF: DO SOME POP MATRIX EXAMPLES AS SOON AS POSSIBLE!!

ICM Week 3 Assignment: Animate Object Character

Posted on October 03, 2005 at 03:17 PM by sj695

Turn your creature/car/construction (or make a new one) into an object with a function/method to draw it and a function/method that moves it. Create 2 or 3 instances that move independently. There should be some differences in color, size, and/or speed

Source code: anim_train_object

ABOUT THIS JOURNAL

Welcome to my ITP Journal, my name is Steven Jackson and I'm currently in my first year of studies in the Interactive Telecommunications Program (ITP) at New York University.

I will be using this journal to store and document projects, exercises and notes pertaining to classes I will be taking my first and second year.

CONTACT INFO
SEARCH

CATEGORIES
ARCHIVES
RECENT ENTRIES
XML FEEDS

» RDF
» ATOM

POWERED BY

Super Powered by Movable Type 3.17